我有包含多个字段的MongoDB文档集合。列/字段之一应仅是数字,但其中一些字段包含非数字(损坏的)数据作为字符串值。我应该找到该列的最高数值,不包括损坏的非数值数据。我知道 Getting the highest value of a column in MongoDB 问题,但是AFAIK,这个扩展案例没有被涵盖。

下面的例子描述了这个问题。对于最高值,应返回带有 "age": 70 的文档:

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

为find()/findOne()查询提供一个PHP示例将很有帮助。非常感谢!

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 是字符串的文档。在 shell 中,您的查询将如下所示:

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

或者在 Martti 的 PHP 中:
$cursor = $collection->find(array('age' => array('$not' => array('$type' => 2))), array('age' => 1));
$cursor->sort(array('price' => -1))->limit(1);

10-07 16:35
查看更多