MongoDB无法从_id投射字符串值

时间:2015-05-13 05:38:57

标签: node.js mongodb mongodb-query

我有一个聚合来从"分享"的集合中提取指标。动作。这些指标按日和平台(twitter,pintrest等)分组。除了在$project阶段格式化输出之外,每个阶段都能正常工作,我似乎无法在输出中调用platform字符串。我仍然在_id中看到它,但是我无法将它投射到其他领域。

汇总如下:

{
  $unwind: "$platforms"
},
{
  $project: {
    day: {$dayOfMonth: "$created_at"},
    month: {$month: "$created_at"},
    year: {$year: "$created_at"},
    platforms: 1
  }
},
{
  $group: {
    _id: {
      platorms: "$platforms",
      day: "$day",
      month: "$month",
      year: "$year"
    },
    count: {$sum: 1}
  }
},
{
  $project: {
    day: "$_id.day",
    month: "$_id.month",
    year: "$_id.year",
    platform: "$_id.platforms",
    count: 1
  }
}

以下输出为:

{
"result" : [ 
    {
        "_id" : {
            "platorms" : "EMAIL",
            "day" : 28,
            "month" : 4,
            "year" : 2015
        },
        "count" : 1,
        "day" : 28,
        "month" : 4,
        "year" : 2015
    }, 
    {
        "_id" : {
            "platorms" : "EMAIL",
            "day" : 27,
            "month" : 4,
            "year" : 2015
        },
        "count" : 10,
        "day" : 27,
        "month" : 4,
        "year" : 2015
    }, 
    {
        "_id" : {
            "platorms" : "SMS",
            "day" : 27,
            "month" : 4,
            "year" : 2015
        },
        "count" : 1,
        "day" : 27,
        "month" : 4,
        "year" : 2015
    }, 
    {
        "_id" : {
            "platorms" : "FACEBOOK",
            "day" : 27,
            "month" : 4,
            "year" : 2015
        },
        "count" : 1,
        "day" : 27,
        "month" : 4,
        "year" : 2015
    }, ...

日,月和年的整数项目很好,但平台没有。

1 个答案:

答案 0 :(得分:1)

这是因为在$group阶段,您的复合_id带有platorms: "$platforms"(字段名称中缺少f)并且您正在预测$_id.platforms您的上一个$project阶段,由于此类字段不存在,您将无法获得任何结果。您还可以使用_id排除_id: 0字段。

将您的$group阶段更改为:

{
  $group: {
    _id: {
      platforms: "$platforms",
      day: "$day",
      month: "$month",
      year: "$year"
    },
    count: {$sum: 1}
  }
}