Php mongodb:查找列的最高数值

Php mongodb:查找列的最高数值,php,mongodb,find,Php,Mongodb,Find,我有一个包含几个字段的MongoDB文档集合。其中一列/字段应仅为数字,但其中一些字段包含非数字(损坏)数据作为字符串值。我应该找到此列的最高数值,不包括损坏的非数值数据。我知道这个问题,但很抱歉,这个扩展的案例没有包括在内 下面的示例描述了该问题。对于最大值,应返回带有“age”:70的文档: [ { "id": "aa001", "age": "90" }, { "id": "bb002", "age": 70 }, { "id": "cc003",

我有一个包含几个字段的MongoDB文档集合。其中一列/字段应仅为数字,但其中一些字段包含非数字(损坏)数据作为字符串值。我应该找到此列的最高数值,不包括损坏的非数值数据。我知道这个问题,但很抱歉,这个扩展的案例没有包括在内

下面的示例描述了该问题。对于最大值,应返回带有
“age”:70的文档:

[
{
    "id": "aa001",
    "age": "90"
},
{
    "id": "bb002",
    "age": 70
},
{
    "id": "cc003",
    "age": 20,
}
]
为find()/findOne()查询提供一个PHP示例会有很大帮助。非常感谢

约翰尼克想出了一个完美的解决方案。以下是可用的PHP代码:

$cursor = $collection->find(array('age' => array('$not' => array('$type' => 2))), array('age' => 1));
$cursor->sort(array('age' => -1))->limit(1);
您可以在查询中使用带运算符来排除
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);

您可以使用聚合函数从这样的集合中获取最大数量

$data=$collection->aggregate(array
                    ( '$group'=> 
                        array('_id'=>'',
                            'age'=>array('$max'=>'$age'.)
                        )
                    )
            );
使用PHP驱动程序(mongodb)
使用
findOne()

这对我有用

$options = ['limit' => 100,'skip' => 0, 'projection' => ['score' => ['$meta' => 'textScore']], 'sort' => ['score' => ['$meta' => 'textScore']]];

哇,太快了,谢谢!工作完美。我将在问题中添加与工作相关的PHP代码。
$options = ['limit' => 100,'skip' => 0, 'projection' => ['score' => ['$meta' => 'textScore']], 'sort' => ['score' => ['$meta' => 'textScore']]];