我有包含几个字段的MongoDB文档集合.其中一列/字段应仅为数字,但其中一些字段包含非数字(损坏)数据作为字符串值.我应该找到该列的最高数值,不包括损坏的非数值数据.我知道在MongoDB中获取列的最高值的问题,但AFAIK,这个扩展的案例没有涵盖.
以下示例描述了该问题.对于最高值,"age": 70应返回文档:
[
{
"id": "aa001",
"age": "90"
},
{
"id": "bb002",
"age": 70
},
{
"id": "cc003",
"age": 20,
}
]
Run Code Online (Sandbox Code Playgroud)
为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);
Run Code Online (Sandbox Code Playgroud) 我正在尝试获取具有最大值的文档列表。如果我知道具有最大值的文档数,我可以指定它(就像在另一个 stackoverflow 解决方案“mongodb 如何从集合中获取最大值”中的解决方案中一样),但如果我不知道该怎么做,我可以指定它不知道文档的数量是多少。
例如,使用以下文件:
{name:"a", age:10}
{name:"b", age:11}
{name:"d", age:12}
{name:"c", age:12}
Run Code Online (Sandbox Code Playgroud)
所以我知道有 2 个文档的最大年龄为 12。因此我可以编写以下查询
db.collection.find().sort({age: -1).limit(2)
Run Code Online (Sandbox Code Playgroud)
我使用limit(2)是因为我知道有 2 个文档具有最大值,但是我该如何自动化呢?我可以计算具有最大值的记录,将其存储在一个变量中并像这样使用它limit(n)吗?有没有其他方法可以做到?