给定具有属性的mongo集合" createdDate"," eventType"还有其他几个,我想查询给定日期范围之间的文档,并按eventType列出计数。 截至目前,我有一个冗长的方法:
eventType
db.EventMessage.distinct( "eventType" , { "env" : "prod" });
让我们说这个查询yeilds,Foo1EventType,Foo2EventType,Foo3EventType等。
db.EventMessage.count ( { "eventType" : "Foo1EventType" , "createdDate" : {"$gte": new Date("2015-05-22") , "$lt" : new Date("2015-05-23") } });
上面的查询给出了指定日期范围之间Foo1EventType的事件计数。但是,我需要分别为每个eventType运行此查询。我想检查更好的执行查询,该查询迭代所有不同的eventTypes并根据eventType列出计数 MongoDB每天包含超过50K的文档,并且在任何时间点都可以保存6个月的数据。
对于给定的日期范围,是否有更好的执行查询来按每个eventType产生计数?
答案 0 :(得分:0)
根据您对大型数据集的要求,您应首先index您的文档或使用shard index。
要查找所有不同的eventType
,然后将forEach用于所有不同的数据,如下所示:
db.EventMessage.distinct("eventType", {
"env": "prod"
}).forEach(function(data) {
var doc = db.EventMessage.find({
"eventType": data,
"createdDate": {
"$gte": new Date("2015-05-22"),
"$lt": new Date("2015-05-23")
}
}).count();
print(doc);
})