我有以下文档结构:
(trackerEventsCollection) =
{
"_id" : ObjectId("5b26c4fb7c696201040c8ed1"),
"trackerId" : ObjectId("598fc51324h51901043d76de"),
"trackingEvents" : [
{
"type" : "checkin",
"eventSource" : "app",
"timestamp" : ISODate("2017-08-25T06:34:58.964Z")
},
{
"type" : "power",
"eventSource" : "app",
"timestamp" : ISODate("2017-08-25T06:51:23.795Z")
},
{
"type" : "position",
"eventSource" : "app",
"timestamp" : ISODate("2017-08-25T06:51:23.985Z")
}
]
}
我想编写一个查询,该查询将计算按日分组的"type" : "power"
类型的trackingEvents数。这似乎对我来说非常棘手,因为父文档没有日期,我应该依赖属于timestamp
数组成员的trackingEvents
字段。
我没有真正体验过mongodb用户,也无法理解到目前为止如何实现这一目标。
非常感谢任何帮助,谢谢
答案 0 :(得分:1)
要将嵌套数组作为单独的文档处理,您需要使用$unwind.在下一阶段,您可以使用$ match按type
过滤掉。然后你可以通过计算出现的单日进行分组。关键是您必须构建包含年,月和日的分组键,如下面的代码所示:
db.trackerEvents.aggregate([
{ $unwind: "$trackingEvents" },
{ $match: { "trackingEvents.type": "power" } },
{
$group: {
_id: {
year: { $year:"$trackingEvents.timestamp" },
month:{ $month:"$trackingEvents.timestamp" },
day: { $dayOfMonth:"$trackingEvents.timestamp" }
},
count: { $sum: 1 }
}
}
])