如何在MongoDB中对数组数组中的元素进行排序?

时间:2019-06-21 17:13:14

标签: mongodb

我正在学习MongoDB的排序。我有一个包含如下文档的集合:

{
"_id" : ObjectId("5d0c13fbfdca455311248d6f"),
"borough" : "Brooklyn",
"grades" : 
    [ 
        { "date" : ISODate("2014-04-16T00:00:00Z"), "grade" : "A", "score" : 5 },
        { "date" : ISODate("2013-04-23T00:00:00Z"), "grade" : "B", "score" : 2 },
        { "date" : ISODate("2012-04-24T00:00:00Z"), "grade" : "A", "score" : 4 }
    ],
"name" : "C & C Catering Service",
"restaurant_id" : "40357437"
}

我想按布鲁克林的所有餐厅的最新得分排序。

现在我有:

db.restaurants.find({borough: "Brooklyn"}).sort()

但是我不知道如何进行。对如何按照最新分数(成绩中的第一项)进行排序有帮助吗?

1 个答案:

答案 0 :(得分:0)

在mongo中使用find查询是不可能的,您必须使用这样的聚合:

db.collection.aggregate([
  {
    $unwind: "$grades"
  }, 
  {
    $sort: {"grades.date": -1}
  }, 
  {
     $group: {
        _id:"$_id",
        grades: {$push:"$grades"},
        resturant_id: {$first: "$resturant_id",
        name: {$first: "$name"}, 
        borough: {$first: "$borough"}
    }
  }
]);

编辑:

 collection.find({}).sort({'grades.0.date': -1});