mongodb: поиск наивысшего числового значения столбца

У меня есть сборник документов MongoDB, содержащий несколько полей. Один из столбцов / полей должен быть только числовым, но некоторые из этих полей содержат нечисловые (поврежденные) данные в виде строковых значений. Я должен найти наивысшее числовое значение этого столбца, исключая коррумпированные, не численные данные. Мне известно о том, как получить максимальную ценность столбца в MongoDB , но AFAIK, этот расширенный случай не был рассмотрен.

Пример ниже показывает проблему. Для наивысшего значения должен быть возвращен документ с "age": 70 :

 [ { "id": "aa001", "age": "90" }, { "id": "bb002", "age": 70 }, { "id": "cc003", "age": 20, } ] 

Предоставление примера PHP для запроса find () / findOne () будет иметь большую помощь. Большое спасибо!

JohnnyHK придумал идеальное решение. Вот рабочий код PHP:

 $cursor = $collection->find(array('age' => array('$not' => array('$type' => 2))), array('age' => 1)); $cursor->sort(array('age' => -1))->limit(1); 

Вы можете использовать оператор $type с $not в вашем запросе, чтобы исключить документы, где age – это строка. В оболочке ваш запрос будет выглядеть так:

 db.test.find({age: {$not: {$type: 2}}}).sort({age: -1}).limit(1) 

Или в PHP от Martti:

 $cursor = $collection->find(array('age' => array('$not' => array('$type' => 2))), array('age' => 1)); $cursor->sort(array('price' => -1))->limit(1); 

с драйвером PHP (mongodb)
используя findOne()

 $filter=[]; $options = ['sort' => ['age' => -1]]; // -1 is for DESC $result = $collection->findOne(filter, $options); $maxAge = $result['age'] 

Вы можете использовать функцию aggregate для получения максимального количества из таких коллекций.

 $data=$collection->aggregate(array ( '$group'=> array('_id'=>'', 'age'=>array('$max'=>'$age'.) ) ) );