Mongodb 将字段分组/聚合在一起
我有一个导入MongoDB的csv文件,它的结构如下: 我想用start as id将其分组,并将所有其他字段作为该字段的子字段,例如:Mongodb 将字段分组/聚合在一起,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个导入MongoDB的csv文件,它的结构如下: 我想用start as id将其分组,并将所有其他字段作为该字段的子字段,例如: "_id" : "A" { "destination" : B { "duration" : 5 "duration" : 3 "duration" : 6 } "destination"
"_id" : "A" {
"destination" : B {
"duration" : 5
"duration" : 3
"duration" : 6
}
"destination" : C {
"duration" : 10
}
}
"_id" : "B" {
"destination" : A {
"duration" : 4
}
}
{ "Destination": B,
"Duration": 5
},
{
"EndStationID": B,
"Duration": 3
}
我了解MongoDB聚合命令的基本知识,我根据Yogesh的回答尝试了以下方法:
db.test.aggregate([
{ "$group": {
"_id": "$start",
"Trips": {
"$push": {
"Destination" : "$destination",
"Duration" : "$duration"
}
}
}
}],{allowDiskUse:true}).pretty()
我的问题是如何将持续时间分组到其中。现在,对于从A到B的两次“行程”,有两个条目如下:
"_id" : "A" {
"destination" : B {
"duration" : 5
"duration" : 3
"duration" : 6
}
"destination" : C {
"duration" : 10
}
}
"_id" : "B" {
"destination" : A {
"duration" : 4
}
}
{ "Destination": B,
"Duration": 5
},
{
"EndStationID": B,
"Duration": 3
}
我如何将它们组合成这样的结构:
{ "Destination": B {
"Duration": 5,
"Duration": 3
}
根据您的CSV结构,我创建了以下集合
{ "start" : "A", "destination" : "B", "duration" : 5 }
{ "start" : "A", "destination" : "B", "duration" : 3 }
{ "start" : "A", "destination" : "B", "duration" : 6 }
{ "start" : "B", "destination" : "A", "duration" : 4 }
首先,您应该对开始和目标字段进行分组,然后将持续时间推送到数组中,以便按如下方式进行聚合查询:
db.collectionName.aggregate({
"$group": {
"_id": {
"start": "$start",
"dest": "$destination"
},
"duration": {
"$push": {
"duration": "$duration"
}
}
}
}, {
"$project": {
"_id": "$_id.start",
"destination": "$_id.dest",
"duration": 1
}
}).pretty()
谢谢,我最后部分使用了你的方法,并在这里给出了答案: