如何按日期对文档进行分组并获得MongoDB中特殊字段的文档数?

时间:2019-09-16 16:33:42

标签: mongodb

我正在使用nodejs / mongo堆栈为我们的广告平台构建一个分析工具。该工具能够通过端点收集印象和点击。印象和点击共有2个主要集合。 集合的结构非常相似。您可以在下面找到示例结构:

集合结构:

    id:Number,
    type: Number,
    publisher: {
        id: String
    },
    date: {
        type: Date,
        default: Date.now
    }

示例文档:

{ 
     "_id" : ObjectId("5d4c23bfa0fb1e2b00f95560"), 
     "id" : 1,
     "type" : 2,
     "publisher" : {
          "id" : "5d4a0fe11332d90c2c7a9aae" 
     },
     "date" : ISODate("2019-08-08T13:29:35.972Z"),
     "__v" : 0 
}

我想获取具有特殊日期范围和pubId的文档。我可以使用聚合的 $ match 运算符来执行此操作。之后,我要计算特殊类型的文档并按日期将其分组。

通过下面的查询,我可以按日期对文档进行分组,但是我需要获取类型的计数。

尝试查询:

db.impressions.aggregate([ 
     { $match: { publisher: {id:"1"} } }, 
     { $group:{ 
         _id :{year: { $year: "$date" }, month: { $month: "$date" }, day: { $dayOfMonth: "$date" }}, 
         total: { $sum: "1" }}}, 
     { $sort: { _id:1 } } ])

结果:

{ "_id" : { "year" : 2019, "month" : 8, "day" : 30}, "total" : 4892832}
{ "_id" : { "year" : 2019, "month" : 8, "day" : 31}, "total" : 4930281}
{ "_id" : { "year" : 2019, "month" : 9, "day" : 01}, "total" : 9534832}

预期结果:

{ "_id" : { "year" : 2019, "month" : 9, "day" : 3}, "totalType1" : "30593", "totalType2" : "10593", "totalType3" : "29432" }
{ "_id" : { "year" : 2019, "month" : 9, "day" : 2}, "totalType1" : "23291", "totalType2" : "32031", "totalType3" : "5932" }
{ "_id" : { "year" : 2019, "month" : 9, "day" : 1}, "totalType1" : "12003", "totalType2" : "53102", "totalType3" : "11059" }

0 个答案:

没有答案