Mongodb 发送的所有消息的总和

Mongodb 发送的所有消息的总和,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,

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, 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
        }
    }
})

显示聚合管道。