1
我有以下文件:如何通過組並獲得各組前N和前N的其他領域MongoDB中
{
"_id" : ObjectId("599b1a789125130dfc613188"),
"traj_id" : 1,
"aisle_id" : "Aisle01",
"traf_seq" : [
{
"node" : "catg1",
"pst" : 1,
"time" : 12.0
},
{
"node" : "catg2",
"pst" : 2,
"time" : 12.0
}
]
},
{
"_id" : ObjectId("599b1a789125130dfc613188"),
"traj_id" : 2,
"aisle_id" : "Aisle01",
"traf_seq" : [
{
"node" : "catg1",
"pst" : 1,
"time" : 12.0
},
{
"node" : "catg2",
"pst" : 2,
"time" : 12.0
},
{
"node" : "catg1",
"pst" : 1,
"time" : 12.0
},
]
},
{
"_id" : ObjectId("599b1a789125130dfc613188"),
"traj_id" : 3,
"aisle_id" : "Aisle02",
"traf_seq" : [
{
"node" : "catg1",
"pst" : 1,
"time" : 12.0
},
{
"node" : "catg2",
"pst" : 2,
"time" : 12.0
},
{
"node" : "catg2",
"pst" : 3,
"time" : 12.0
},
]
}
我想頂端N類走訪了每個過道。說,對於N = 1, 預期輸出會是這樣的:
"_id" : {
"aisle" : "Aisle01",
"catg" : "catg1"
},
"maxValue" : 3.0
"_id" : {
"aisle" : "Aisle02"
"catg" : "catg2"
},
"maxValue" : 2.0
由於在過道1,CATG 1已被訪問的次數的最大數目(即3),和catg2在過道被訪問了2次(最大值)。
我可以在每個過道獲得最大數量,但我很努力地獲得類別名稱,因爲我將它排除在字段組中。 或者我得到所有類別的名稱,我不想要。 下面是我到目前爲止有:
db.test.aggregate([
{$unwind:"$traf_seq"},
{$group: {
"_id": {
"traj_id" :"$traj_id",
"node": "$traf_seq.node",
"aisle":"$aisle_id"
},
"count":{
"$sum":1}
}},
{$group: {
"_id": {
"sumnode":"$_id.node",
"aisle": "$_id.aisle"},
"distcount":{
"$sum":1},
}},
{$group: {
"_id": {
"aisle": "$_id.aisle"},
"otherField1":{$push:"$_id.sumnode"},
"maxValue": {$max:"$distcount"}
}}
感謝您的回答..它的作品! 對不起,我忘了在問題中提到這一點,但如果我想計算不同的訪問(例如,每個文檔每個traj_id出現兩次catg 1,我只想將它計爲1),那麼我在哪裏添加?我可以在組中添加traj_id嗎? –
NM ..我明白了..只是不得不在所有分組中添加過道。謝謝! –