繁体   English   中英

如何在数组mongodb下的子文档中使用日期字符串对数据进行分组

[英]How to group data with date string inside subdocuments under an array mongodb

我的文件具有这种结构

_id: "adklkj389723jk23KLJjl2LU92kJO387"
"impressions": [{
    "_id": ObjectId("5b74799535f2722494075981"),
    "country": "GB",
    "impression_count": 22,
    "_campaignid": ObjectId("5b72d78847db422040ee60cf"),
    "date": ISODate("2018-08-15T19:00:00Z")
  },
  {
    "_id": ObjectId("5b74799d35f2722494075982"),
    "country": "GB",
    "impression_count": 22,
    "_campaignid": ObjectId("5b72d7bf47db422040ee60d1"),
    "date": ISODate("2018-08-15T19:00:00Z")
  },
  {
    "_id": ObjectId("5b7479a735f2722494075983"),
    "country": "GB",
    "impression_count": 20,
    "_campaignid": ObjectId("5b72d79e47db422040ee60d0"),
    "date": ISODate("2018-08-15T19:00:00Z")
  }
]

我想做什么我想将印象与它们创建的日期进行分组,我将日期另存为db中的字符串以执行此操作,我正在使用此查询

db.advertisers.aggregate([{
  $group: {
    _id: "$impressions.date",
    count: {
      $sum: "$impressions.impression_count"
    }
  }
}]).pretty()

结果

这个查询给了我这样的结果,所以我做错了什么?

{
  "_id": [
    ISODate("2018-08-15T19:00:00Z"),
    ISODate("2018-08-15T19:00:00Z"),
    ISODate("2018-08-15T19:00:00Z")
  ],
  "count": 1
}

由于您要处理数组,因此您可能希望unwind impressions

db.collection.aggregate([
  {
    "$unwind": "$impressions"
  },
  {
    $group: {
      _id: "$impressions.date",
      count: {
        $sum: "$impressions.impression_count"
      },

    }
  }
])

这将为您提供:

[
  {
    "_id": ISODate("2018-08-15T19:00:00Z"),
    "count": 64
  }
]

你可以在这里看到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM