簡體   English   中英

MongoDB-多個集合中的$ sum

[英]MongoDB - $sum in multiple collections

我有很多收藏。 這些集合的視圖與JSON相同。 我要做的是根據其ID收集集合並創建一個集合。 我該怎么做?

A.json

{
    "_id" : ObjectId("58455d2d506c1cab1c82152c"),
    "value" : 515835.0
}
{
    "_id" : ObjectId("58455d2d506c1cab1c82153c"),
    "value" : 6621696.0
}

B.json

{
    "_id" : ObjectId("58455d2d506c1cab1c82152c"),
    "value" : 2118.0
}
{
    "_id" : ObjectId("58455d2d506c1cab1c82153c"),
    "value" : 1190.0
}
{
    "_id" : ObjectId("423232d2d506c1cab1c1232c"),
    "value" : 10.0
}

在A集合中收集,ID:1,集合B ID:1(如果匹配)。

集合ID中的A:2,如果您不在任何集合中,則僅顯示該值。

在我收集的最后一個收集中,我想成對收集對象和ID。

Result.json

{
    "_id" : ObjectId("58455d2d506c1cab1c82152c"),
    "value" : 517953.0 // A.value + B.value
}
{
    "_id" : ObjectId("58455d2d506c1cab1c82153c"),
    "value" : 6633596.0 // A.value + B.value
}
{
    "_id" : ObjectId("423232d2d506c1cab1c1232c"),
    "value" : 10.0 // B.value (A.value : null)
}

我想要這個為多個集合。

對於示例中給出的1-0 / 1關系,可以使用$ lookup ,如下所示:

db.B.aggregate([
    {$lookup: {
        from: "A",
        localField: "_id",
        foreignField: "_id",
        as: "a"
    }},
    {$unwind: {path: "$a", preserveNullAndEmptyArrays: true}},
    {$project: {
        value: {$add: ["$value", {$ifNull: ["$a.value", 0 ]}]}
    }}
]);

它的確會忽略A中的任何文檔,而B中沒有相應的文檔,即結果與集合B中的文檔數量相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM