我是 PHP 并且使用 MongoDB 的新手,所以请耐心等待:)
这是我想要做的一个例子,而不是实际数据,所以希望这会有所帮助!
我有一个 MongoDB 集合,其中包含嵌套对象,我想根据其中一个嵌套字段对查询结果进行排序。
来自数据库的示例行通过 MongoDB Compass :
_id:"12345"<br>
houses:Object<br>
> 124 Happy St.:Object<br>
> name:"124 Happy St."<br>
> price:"$123,000"<br>
> 123 Happy St.:Object<br>
> name:"123 Happy St."<br>
> price:"$124,000"<br>
> 125 Happy St.:Object<br>
> name:"125 Happy St."<br>
> price: "$200,000"<br>
我希望能够根据房屋对象中的价格字段(从最高到最低)对查询进行排序。
我已经尝试了以下但我无法看到结果按预期返回排序 - 请记住,我不是那么强大但 PHP 和 MongoDB 所以对我很轻松:P
$houses_query = new MongoDB\Driver\Query([ "_id" => "12345" ], [ 'sort' => [ 'houses.price' => 1 ]])
有没有办法过滤查询,还是我必须将行读入数组并按此排序?
答案 0 :(得分:0)
当然,mongoDB有一个强大的排序算法和sort,order_by等工具。你可以使用php数组,但是mongoDB有很多祝福:)
我现在做了类似的解决方案,你可以这样做(你的mongo类可以不同)
$videos = $this->mongo_db->where(
array('$text' => array('$search' => $q),
'status' => 1))
->order_by(array('video_sales' => 'desc'))
->get('videos');
Mongo文档告诉我们;
db.collection.find().sort( { age: -1 } )
从v3.2开始在mongo Shell中弃用 从v3.2开始,$ orderby运算符在mongo shell中已弃用。在mongo shell中,使用cursor.sort()代替。