如何通过mongodb聚合函数对内部记录求和

时间:2015-09-11 01:07:01

标签: mongodb mongodb-query aggregation-framework

考虑到这样的一些数据:

[
  {issue: "taxes", resp: "agree"},
  {issue: "taxes", resp: "disagree"},
  {issue: "taxes", resp: "disagree"},
  {issue: "sexism", resp: "disagree"},
  {issue: "sexism", resp: "disagree"},
]

我想使用Mongo聚合函数让我输出完全如下:

{issue: "taxes", agree: 1, disagree: 2, tot: 3}
{issue: "sexism", agree: 0, disagree: 2, tot: 2}

我试过这个:

db.responses.aggregate(
   [  
      {
        $group : {
           _id : { issue: "$issue", resp: "$resp" },
           count: { $sum: 1 },
        }
      },
   ]
)

这让我很接近,但并不完全:

"result" : [ 
    {
        "_id" : {
            "issue" : "racism",
            "resp" : "agree"
        },
        "count" : 3
    }, 
    {
        "_id" : {
            "issue" : "racism",
            "resp" : "disagree"
        },
        "count" : 3
    },

一旦它返回一个循环和一些丑陋的计数器,我就可以解析数据了,而且我得到的数据量也没什么大不了的。但我很好奇,并试图在Mongo聚合方面做得更好。我想我需要一个$项目,但我无法理解!

对于典型的托管mongo配置,我也很好奇它的可扩展性,最多可以说20k到50k左右的响应记录。我不难创建一个摘要文档,只是在用户输入进入时更新同意/不同意的总数。我在这里想到的结果将是我想要的输出加上候选/ etc字段用于查找。也许这是一种更为mongo-ish的做事方式?任何想法都赞赏。

0 个答案:

没有答案