node.js - Mongo : Group, 推送并排序

标签 node.js mongodb aggregation-framework

我有一个 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]
 }]

最佳答案

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

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

关于node.js - Mongo : Group, 推送并排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28301746/

相关文章:

node.js - 在数组元素中添加子文档

node.js - SequelizeForeignKeyConstraintError : insert or update on table "states" violates foreign key constraint "states_country_id_fkey"

reactjs - MongoDB - 语法错误 : Invalid regular expression in $regex

node.js - 如何将 meteor 助手存储在 mongoDB 集合中,以及如何从 mongoDB 集合中呈现它

json - 获取 null,$sum 聚合 - Mongo

javascript - 如何连接该 mongodb 集合中的所有成员 ID?

javascript - 对于 Javascript 应用程序,比普通 JSON 更丰富的数据序列化?

javascript - 如何正确使用 Chalk Terminal 字符串样式

javascript - Nodejs - 设置不同的 api 版本

mongodb - 奇怪的 mongodb 和 mongoose 错误 : not master and slaveOk=false error