我正在使用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" }