2015-10-31 61 views
0

我对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

阅读$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的值,因此您可以对其应用排序。

+0

谢谢。这工作! – Yolo49

+0

@ Yolo49欢迎来到Stack Overlow。请在此处阅读[接受答案]的意思(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 –