计数仅考虑聚合在mongodb中的日期而不是时间

时间:2014-11-05 01:57:58

标签: mongodb mongodb-query aggregation-framework

获取总计数的相关问题已在下面解答

Count and Aggregate in MongoDB

要执行此操作的查询是

db.sg_searchaudit.aggregate([
{"$unwind": "$log" },
{"$match": {"log.ts": {"$gte": new Date("2014-09-01"), "$lte": new Date("2014-11-04")}}},
{"$group": {"_id": "$_id","count": { "$sum": 1 }}},
{"$sort": {"count":1}},
   {"$limit": 50}])

当我检查上述查询中的单个关键字时: -

db.sg_searchaudit.aggregate([
{"$match":{"_id": "mongo" ,"log.ts": {"$gte": new Date("2014-09-01T00:00:00.00Z"),     "$lte": new Date("2014-11-04T00:00:00.00Z")}}},
{"$unwind": "$log" },
{"$match": {"log.ts": {"$gte": new Date("2014-09-01T00:00:00.00Z"), "$lte": new Date("2014-11-04T00:00:00.00Z")}}},
{"$group": {"_id": "$_id","count": { "$sum": 1 }}},
{"$sort": {"count":-1}},
   {"$limit": 50}])

Tha是我知道它实际上是为每个日期聚合而不是在时间戳上聚合的。

因此,对于以下数据,上面的“mongo”查询会返回 2 而不是 4

{
"_id" : "mongo",
"log" : [
{
    "ts" : ISODate("2011-02-10T01:20:49Z"),
    "visitorId" : "25850661"
},
{
    "ts" : ISODate("2014-11-01T14:35:05Z"),
    "visitorId" : NumberLong(278571823)
},
{
    "ts" : ISODate("2014-11-01T14:37:56Z"),
    "visitorId" : NumberLong(0)
},
{
    "ts" : ISODate("2014-11-04T06:23:48Z"),
    "visitorId" : NumberLong(225200092)
},
{
    "ts" : ISODate("2014-11-04T06:25:44Z"),
    "visitorId" : NumberLong(225200092)
}
],
"uts" : ISODate("2014-11-04T06:25:43.740Z")
}

有什么建议吗?

0 个答案:

没有答案