Mongodb 发送的所有消息的总和
Mongodb版本2.6.9 我正试图计算一家公司参与信息交互的总数。我可以使用aggregate$组获得交互的一面,但我基本上没有看到这两个字段,而是将它们聚合在一起,以获得每个唯一的公司IDMongodb 发送的所有消息的总和,mongodb,Mongodb,Mongodb版本2.6.9 我正试图计算一家公司参与信息交互的总数。我可以使用aggregate$组获得交互的一面,但我基本上没有看到这两个字段,而是将它们聚合在一起,以获得每个唯一的公司ID sender\u id和receiver\u id与同一个公司id相关 { "_id" : a, "sender_id" : 1, "receiver_id" : 2, payload: "data" } { "_id" : b, "sender_id" : 2, "receiver_id" : 5,
sender\u id
和receiver\u id
与同一个公司id相关
{ "_id" : a, "sender_id" : 1, "receiver_id" : 2, payload: "data" }
{ "_id" : b, "sender_id" : 2, "receiver_id" : 5, payload: "data" }
{ "_id" : c, "sender_id" : 2, "receiver_id" : 4, payload: "data" }
{ "_id" : d, "sender_id" : 3, "receiver_id" : 2, payload: "data" }
{ "_id" : e, "sender_id" : 4, "receiver_id" : 1, payload: "data" }
使用上述数据结构,我试图生成一个类似于
{ "_id" : 1, count: 2}
{ "_id" : 2, count: 4}
{ "_id" : 3, count: 1}
{ "_id" : 4, count: 2}
{ "_id" : 5, count: 1}
例如,公司2涉及到消息a、b、c、d。您的选择仅限于2.6管道。你可以试试下面的管道
$group
使用$push
为发送方id
和接收方id
创建单值数组
使用$project
和$setUnion
将ID合并到单个数组中
$REWIND
和$group
来计算发生次数
db.collection.aggregate({
"$group": {
"_id": "$_id",
"sender_id": {
"$push": "$sender_id"
},
"receiver_id": {
"$push": "$receiver_id"
}
}
}, {
"$project": {
"id": {
"$setUnion": ["$sender_id", "$receiver_id"]
}
}
}, {
"$unwind": "$id"
}, {
"$group": {
"_id": "$id",
"count": {
"$sum": 1
}
}
})
对于较新的版本,您可以使用下面的管道。使用[]
创建阵列
db.collection.aggregate({
$project: {
id: ["$sender_id", "$receiver_id"]
}
}, {
$unwind: "$id"
}, {
$group: {
_id: "$id",
count: {
$sum: 1
}
}
})
显示聚合管道。