J'ai la collection MongoDB de documents contenant plusieurs domaines. L'une des colonnes / champs doit être numérique uniquement, mais certains de ces champs contiennent des données non numériques (corrompues) sous forme de valeurs de chaîne. Je devrais trouver la valeur numérique la plus élevée de cette colonne, à l'exclusion des données corrompues et non numériques. Je suis au courant de la question Obtenir la valeur la plus élevée d'une colonne dans MongoDB , mais Afaik, cette affaire étendue n'était pas couverte.
L'exemple ci-dessous représente le problème. Pour la valeur la plus élevée, le document avec fournissant un exemple php pour la recherche () / Findone () La requête serait beaucoup d'aide. Merci beaucoup! P> Johnnyhk est venu avec la solution parfaite. Voici le code PHP de travail: P> "Âge": 70 code> doit être retourné: p> $cursor = $collection->find(array('age' => array('$not' => array('$type' => 2))), array('age' => 1));
$cursor->sort(array('age' => -1))->limit(1);
4 Réponses :
Vous pouvez utiliser le ou en php de martti: p> $ Type code> a> opérateur avec $ pas code> in Votre requête pour exclure les docs où Âge code> est une chaîne. Dans la coque, votre requête ressemblerait à:
Wow c'était rapide, merci! Fonctionne parfaitement. Je vais ajouter le code PHP associé au travail à la question.
Vous pouvez utiliser une fonction agrégée pour obtenir un nombre maximum de collections comme celle-ci.
Utilisation de FindOne () CODE> $filter=[];
$options = ['sort' => ['age' => -1]]; // -1 is for DESC
$result = $collection->findOne(filter, $options);
$maxAge = $result['age']
Cela fonctionne pour moi