【问题标题】:Mongodb: sort by elements in an arrayMongodb:按数组中的元素排序
【发布时间】:2018-07-10 11:36:58
【问题描述】:

我正在处理一个项目,但我发现一个我不理解且不起作用的请求。我们的文档如下所示:

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

还有一个请求应该按角色对这些文档的集合进行排序。所以对于上面的例子,我将有ADMIN 然后是BUYER。所以这是请求:

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

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

【问题讨论】:

  • 嗨。你能更好地解释一下你想要得到什么吗?角色是一个数组。如何按数组排序?
  • 嗨。是的,这就是我想做的。
  • 您是否需要按角色名称排序,即“ADMIN”在前,“BUYER”在后?
  • @AnthonyWinzlet 是的
  • 如果 "roles" : [ "ADMIN", "BUYER" ] 呢?

标签: mongodb sorting mongodb-query aggregation-framework


【解决方案1】:

你需要先$unwind“roles”数组,然后你可以很容易地在“roles”上应用$sort

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2019-09-01
    相关资源
    最近更新 更多