MongoDB:引用集合中所有项的总和

时间:2016-02-03 11:23:02

标签: mongodb

我在解决所有帐户余额方面遇到了一些问题。所有账户都参考了存款收集中的不同存款项目。

帐户集合:

[{
    "_id": "56b1ce63315748b44f1174e1",
    "name": "Foo bar",
    "deposits": [
        {
            "$oid": "56b1ce78315748b44f1174e2"
        }
    ]
}]

存款收款:

{
    "_id": {
        "$oid": "56b1deb84f40bfa435e22f3f"
    },
    "account": {
            "$oid": "56b1dea34f40bfa435e22f3e"
    },
    "amount": 300,
    "date": {
        "$date": "2016-02-01T00:00:00.000Z"
    }
}

我试图聚合查询,但它总是返回余额:0。我想我需要在使用聚合之前填充该项目。但是我该怎么做?

Accounts.aggregate([
    { $unwind: "$deposits" },
    {
        $group: {
            _id: "$_id",
            name: { "$first": "$name" },
            balance: { $sum: "$deposits.amount" }
        }
    }])

解决方案:

{
    $lookup:
    {
        from: 'deposits',
        localField: 'amount',
        foreignField: 'deposits',
        as: 'deposits'
    },
},
{ $unwind: "$deposits" },
{
    $group: {
        id: "$_id",
        name: { "$first": "$name" },
        balance: { $sum: "$deposits.amount" }
    }
}

1 个答案:

答案 0 :(得分:1)

您需要使用$lookup运算符才能加入这两个集合,您当前的方法不起作用。 $lookup运算符仅适用于Mongo 3.2及更高版本。

{
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}