【问题标题】:MongoDB cannot project string value from _idMongoDB 无法从 _id 投影字符串值
【发布时间】:2015-05-13 05:38:56
【问题描述】:

我有一个聚合来从“分享”操作的集合中提取指标。这些指标按天和平台(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
    }, ...

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

【问题讨论】:

    标签: node.js mongodb mongodb-query


    【解决方案1】:

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

    将您的$group 阶段更改为:

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

    【讨论】:

    • 哎呀,你抓住了它。我错过了平台中的“f”。完全是我的错字。这似乎是问题所在。
    猜你喜欢
    • 2014-05-27
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多