【发布时间】:2015-09-30 14:10:12
【问题描述】:
我有一个集合文件看起来像:
{
"_id" : ObjectId("560ba1e86db58e34168b456a"),
"object_id" : "1722224",
"user" : {
"id" : null,
"cookie" : "sEnAl9DdPHyTdmxYU3E23g"
},
"createddate" : ISODate("2015-09-30T11:48:40.000+03:00"),
"activity" : [
{
"name" : "Map click",
"selector" : "#toMap",
"event" : "click",
"time" : ISODate("2015-09-30T12:30:59.000+03:00")
},
{
"name" : "Show contacts (main block)",
"selector" : "#jsn-showContacts",
"event" : "click",
"time" : ISODate("2015-09-30T11:48:47.687+03:00")
},
{
"name" : "Show contacts (main block)",
"selector" : "#jsn-showContacts",
"event" : "click",
"time" : ISODate("2015-09-30T15:34:12.000+03:00")
}
]
}
我需要将日期范围传递给 mongodb 并获得包含以下内容的每日结果: 1. 日期 2. 一组选择器点击该日期和点击次数:
{
"date" : ISODate("2015-09-29T00:00:00.000+03:00"),
"selectors" : [
{"#toMap" : 100},
{"#jsn-showContacts" : 200}
]
},
{
"date" : ISODate("2015-09-30T00:00:00.000+03:00"),
"selectors" : [
{"#toMap" : 50},
{"#jsn-showContacts" : 80},
{"#toOrder" : 10}
]
}
结果应该为每个文档计算一次点击,例如,如果我在一个文档中有两次 #showContacts-Min 点击:
"activity" : [
{
"name" : "Show contacts (main block)",
"selector" : "#jsn-showContacts",
"event" : "click",
"time" : ISODate("2015-09-30T11:48:47.687+03:00")
},
{
"name" : "Show contacts (main block)",
"selector" : "#jsn-showContacts",
"event" : "click",
"time" : ISODate("2015-09-30T15:34:12.000+03:00")
}
]
必须计算一次。
真的可以在 DB 端作为一个查询执行,还是应该在应用程序端通过多个 db 查询实现?
【问题讨论】:
标签: mongodb aggregation-framework