【问题标题】:Mongo: Group, push and sortMongo:分组、推送和排序
【发布时间】:2018-09-29 10:12:38
【问题描述】:

我有一个如下的 mongodb 集合数据;我想按 EmployeedID(即 0001)分组,然后排序(按年龄)

{
"_id" : ObjectId("54d0512191a4da7736e9db43"),
"EmployeeID" : "0001",
"Speciality" : "xxx",
"Code" : "P",
"Age" : 8
}

/* 1 */
{
"_id" : ObjectId("54d0512191a4da7736e9db44"),
"EmployeeID" : "0002",
"Speciality" : "yyyyy",
"Code" : "P",
"Age" : 6
 }

/* 2 */
{
"_id" : ObjectId("54d0512191a4da7736e9db45"),
"EmployeeID" : "0001",
"Speciality" : "zzz",
 "Code" : "P",
 "Age" : 5
 }

我知道我可以使用以下方式进行分组。

collection.aggregate([
{$match:{"EmployeeId":0001}},
{$group:{"_id":"$EmployeeID",
        "speciality":{$push:"$Speciality"},
        "Code":{$push:"$Code"},
        "Age":{$push:"$Age"}}}
 ])

但是我怎样才能在这里使用 $sort 呢?所以我的结果可能如下所示;

[{ "EmployeeID" : "0001",
"speciality" : [ "zzz","xxx"],
 "Code" :[ "P","P"],
 "Age" : [5,8]
 }]

【问题讨论】:

    标签: node.js mongodb aggregation-framework


    【解决方案1】:

    您可以在分组阶段之前对文档进行排序:

    collection.aggregate([
    {$sort: {_id: -1}},
    {$match:{"EmployeeId":0001}},
    {$group:{"_id":"$EmployeeID",
        "speciality":{$push:"$Speciality"},
        "Code":{$push:"$Code"},
        "Age":{$push:"$Age"}}}
    ])
    

    【讨论】:

    • _id 只是举例.. 可以按年龄排序{$sort: {Age: 1}},
    【解决方案2】:

    在处理大型集合时,在分组之前进行排序可能会超出 mongo 的内存。幸运的是,您可以将 allowDiskUse 设置为 true 以允许 mongo 写入临时文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2019-05-23
      • 2021-10-17
      • 1970-01-01
      • 2018-08-06
      • 2015-02-16
      • 2012-02-20
      相关资源
      最近更新 更多