$ divide聚合框架问题

时间:2015-10-31 23:34:57

标签: mongodb mongodb-query aggregation-framework

我对MongoDB聚合框架有这个查询。我无法弄清楚为什么我无法运行此查询。我检查了文档,但仍然感到困惑。任何人都可以让我知道什么是错的。

 db.acquisitions.aggregate([

{ $match: {"acquired_year":{$gte:1999} }  },
{ $group: {_id:"$acquired_year", "total_acquisition_amount(BBn)": { $divide :[ {$sum:"$acquistion_price"}, 1000000000 ] } }},
{ $sort : {"acquired_year" : -1} }

])

1 个答案:

答案 0 :(得分:1)

阅读$group手册页,其中还列出了所有有效的"累加器",这意味着必须的运算符是后引用的任何字段属性的第一个参数_id

然后,这应该引导您确定如果您想要总计的$divide,则需要将该操作放在具有$project的单独聚合管道阶段中:

db.acquisitions.aggregate([
    { "$match": { "acquired_year":{ "$gte": 1999 } }},
    { "$group": {
        "_id":"$acquired_year", 
        "total_acquisition_amount(BBn)": { "$sum": "$acquistion_price" }
    }},
    { "$project": {
        "total_acquisition_amount(BBn)": { 
            "$divide": [ "$totatotal_acquisition_amount(BBn)", 1000000000 ] 
        } 
    }},
    { "$sort": { "_id": -1 }}
])

否则您可以使用数学和其他运算符的唯一方法是"在"像$sum这样的累加器,在这种情况下不适用,因为必须在"之后进行除法。总数已经确定。

此外,由于$group," acquired_year"字段不再是发出的文档的一部分,而是_id值,因此您应该对其应用排序。

相关问题