MongoDB 无法从 _id 投影字符串值

MongoDB cannot project string value from _id

我有一个聚合来从 "share" 操作集合中提取指标。这些指标按日期和平台(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
    }, ...

日、月、年的整数项目很好,但平台不行。

这是因为在您的 $group 阶段您有复合 _idplatorms: "$platforms"(字段名称中缺少 f)并且您正在投影 $_id.platforms 在你最后的 $project 阶段,因为这样的字段不存在,你不会得到任何结果。您还可以使用 _id: 0 排除 _id 字段。

将您的 $group 阶段更改为:

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