Mongodb:按数组中的元素排序

时间:2018-07-10 11:36:58

标签: mongodb sorting mongodb-query aggregation-framework

我正在一个项目上,但是发现了一个我不理解且无法正常工作的请求。我们有如下文件:

 {
        "id": ObjectId("6457959757555445"),
        "buyer" : { 
            "id": ObjectId("588888815654684")      
            "roles" : [ 
                "BUYER"
            ]
        }
},
{
        "id": ObjectId("6457959707555445"),
        "buyer" : { 
            "id": ObjectId("588800015654684")      
            "roles" : [ 
                "ADMIN"
            ]
        }
}

有一个请求应该按角色对这些文档的集合进行排序。因此,对于上面的示例,我将依次得到ADMINBUYER。所以这是请求:

{  
   "aggregate":"__collection__",
   "pipeline":[  
      {  
         "$sort":{  
            "buyer.roles":1
         }
    },
}

我们真的应该在这里使用pipeline吗?以及为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

您需要首先$unwind个“角色”数组,然后可以轻松地将$sort应用于“角色”

db.collection.aggregate([
  {
    $unwind: "$buyer.roles"
  },
  {
    $sort: {
      "buyer.roles": 1
    }
  }
])