PHP Mongodb - 基于嵌套对象的排序查询

时间:2018-04-20 20:40:51

标签: php mongodb

我是 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 ]])

有没有办法过滤查询,还是我必须将行读入数组并按此排序?

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()代替。