mongoDB中有多个$组
我有在mongodb不同的logging。 我写下一个小例子:
{_id:"sad547er4w2v5x85b8", name:"Jhon", jobTime:600, floor:2, dept:5, age:25}, {_id:"xcz547wer4xcvcx1g2", name:"Alex", jobTime:841, floor:4, dept:1, age:55}, {_id:"xcnwep2321954ldfsl", name:"Alice", jobTime:100, floor:3, dept:3, age:55}, {_id:"23s3ih94h548jhfk2u", name:"Anne", jobTime:280, floor:2, dept:8, age:22}, {_id:"03dfsk9342hjwq1503", name:"Alexa", jobTime:355, floor:2, dept:6, age:25}
我试图获得这个结果,但我不知道如何分组两次才能得到这个结构。
{[ {age:22, floors:[{floor:2,persons:[{name:"Anne",jobTime:280,dept:8}]}]}, {age:25, floors:[{floor:2,persons:[{name:"Jhon",jobTime:600,dept:5},{name:"Alexa",jobTime:355,dept:6}]}]}, {age:55, floors:[{floor:3,persons:[{name:"Alex",jobTime:841,dept:1}]},{floor:4,persons:[{name:"Alice",jobTime:100,dept:3}]}]} ]}
究竟。 使用“两个” $group
阶段
collection.aggregate([ { "$group": { "_id": { "age": "$age", "floor": "$floor", }, "persons": { "$push": { "name": "$name", "jobTime": "$jobTime", "dept": "$dept" }} }}, { "$group": { "_id": "$_id.age", "floors": { "$push": { "floor": "$_id.floor", "persons": "$persons" }} }} ],function(err,results) { // deal with results here })
其中产生:
{ "_id" : 25, "floors" : [ { "floor" : 2, "persons" : [ { "name" : "Jhon", "jobTime" : 600, "dept" : 5 }, { "name" : "Alexa", "jobTime" : 355, "dept" : 6 } ] } ] }, { "_id" : 55, "floors" : [ { "floor" : 3, "persons" : [ { "name" : "Alice", "jobTime" : 100, "dept" : 3 } ] }, { "floor" : 4, "persons" : [ { "name" : "Alex", "jobTime" : 841, "dept" : 1 } ] } ] }, { "_id" : 22, "floors" : [ { "floor" : 2, "persons" : [ { "name" : "Anne", "jobTime" : 280, "dept" : 8 } ] } ] }
所以最初的$group
是在一个复合键上,包括细节,直到你想添加到初始“数组”的项目, "persons"
。 然后第二个$group
只取得初始_id
一部分作为密钥,再次将内容“推”到一个新的数组中。