【问题标题】:$sum in MongoDB queryMongoDB 查询中的 $sum
【发布时间】:2014-11-18 03:08:31
【问题描述】:

我必须从以下集合中找到总票数(有趣 + 有用 + 酷)。 我如何使用 Mongo 聚合函数来实现这一点

{
    "_id" : ObjectId("5419a8856039fe9f52640bd1"),
    "votes" : {
        "funny" : 0,
        "useful" : 2,
        "cool" : 1
    },

    "business_id" : "vcNAWiLM4dR7D2nwwJ7nCA"
}
,
{
    "_id" : ObjectId("5419a8866039fe9f52640bd2"),
    "votes" : {
        "funny" : 0,
        "useful" : 2,
        "cool" : 0
    },

    "business_id" : "vcNAWiLM4dR7D2nwwJ7nCA"
}

我尝试了以下

db.review.aggregate([ { 
    $project: { 

        total_votes:  
           "$votes.funny"+ "$votes.useful"  + "$votes.cool"

    } 
} ] ,
{
   allowDiskUse : true
}) 

但我得到了

未捕获的异常:聚合失败:{“errmsg”:“异常: 聚合结果超过最大文档大小 (16MB)", "code" : 16389,“好的”:0}

有没有其他方法可以实现这一点?

【问题讨论】:

    标签: mongodb aggregation-framework nosql


    【解决方案1】:

    这可以像这样完成 -

    db.review.aggregate([ 
    { $project : { 'total_votes' : { $add : ["$votes.funny", "$votes.useful", "$votes.cool" ]  } }  }
    ])
    

    希望结果正是您所需要的。

    【讨论】:

      【解决方案2】:

      您可以使用$add 聚合运算符来执行此操作:

      db.review.aggregate([
          {$project: {
              total_votes: {$add: ['$votes.funny', '$votes.useful', '$votes.cool']}
          }}
      ])
      

      输出:

      {
          "result" : [ 
              {
                  "_id" : ObjectId("5419a8856039fe9f52640bd1"),
                  "total_votes" : 3
              }, 
              {
                  "_id" : ObjectId("5419a8866039fe9f52640bd2"),
                  "total_votes" : 2
              }
          ],
          "ok" : 1
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-13
        • 2016-02-02
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-10
        相关资源
        最近更新 更多