代码之家  ›  专栏  ›  技术社区  ›  mzparacha

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

  •  0
  • mzparacha  · 技术社区  · 7 年前

    我的文件有这样的结构

    _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
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Akrion    7 年前

    既然你在处理一个数组 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
      }
    ]
    

    你可以 see this here