我想按时段将记录分组。到目前为止,我已经尝试使用添加到聚合函数中的以下代码:
{
$group : {
_id : { day: { $dayOfMonth: "$timestamp" }},
count: { $sum: 1 }
}
}
这是文档的样子:
{
"_id" : ObjectId("ec9cddd50e08a84cd3f4cccb"),
"orgid" : "5c48500d84430a3a4b828e85",
"timestamp" : ISODate("2019-03-28T14:00:00.000Z"),
"apiid" : {
"zxczxczxczxczxc" : {
"errortotal" : 6,
"hits" : 6,
"humanidentifier" : "Feedback",
"identifier" : "663cfc345e42401c6443cfd635301f8f",
"lasttime" : ISODate("2019-03-28T14:58:07.355Z"),
"success" : 0,
"totalrequesttime" : 0.0,
"requesttime" : 0.0
}
},
"apikeys" : {
"00000000" : {
"errortotal" : 3,
"hits" : 3,
"humanidentifier" : "",
"identifier" : "00000000",
"lasttime" : ISODate("2019-03-28T14:55:10.438Z"),
"success" : 0,
"totalrequesttime" : 0.0,
"requesttime" : 0.0
},
"cae81afc" : {
"errortotal" : 3,
"hits" : 3,
"humanidentifier" : "EE5RqcXMTqcWEx8nZv3vRATLspK2",
"identifier" : "cbe81afc",
"lasttime" : ISODate("2019-03-28T14:58:07.355Z"),
"success" : 0,
"totalrequesttime" : 0.0,
"requesttime" : 0.0
}
}
任何想法我该如何实现?
我得到的结果是:[{_id:{day:null},count:3}],这对我来说似乎是错误的,因为我有两个具有相同日期的文档和另一个具有不同时间戳的文档
更新: 我在聚合函数中也有以下内容:
// Project things as a key/value array, along with the original doc
{
$project: {
array: {$objectToArray: '$apikeys'},
doc: '$$ROOT',
}
},
// Match the docs with a field value of 'x'
{$match: {'array.v.humanidentifier': {$in: trialCustomerUsers}}},
如果我对这部分进行评论,它将可以很好地进行分组,但是在我也不知道密钥是什么的情况下,我还会做一些where语句,这就是为什么我必须添加这段代码< / p>
答案 0 :(得分:1)
只需使用$push
运算符在新字段中累积记录
{
$group : {
_id : { day: { $dayOfMonth: "$timestamp" }},
records: { $push: "$$ROOT" }
}
}
答案 1 :(得分:0)
更改此行
_id : { day: { $dayOfMonth: "$timestamp" }}
到
_id : { day: { $day: "$timestamp" } }
或者您可以执行类似的操作
$group : {
_id : null,
day: '$timestamp',
count: { $sum: 1 }
}
答案 2 :(得分:0)
您已使用$project
doc
字段$$ROOT
中的所有根文档。现在,您的汇总应如下所示
db.collection.aggregate([
{ "$project": {
"array": { "$objectToArray": "$apikeys" },
"doc": "$$ROOT"
}},
{ "$match": { "array.v.humanidentifier": { "$in": trialCustomerUsers }}},
{ "$group" : {
"_id" : { "day": { "$dayOfMonth": "$doc.timestamp" }},
"count": { "$sum": 1 }
}}
])