我有一个带有字符串字段的文档集合" action"和#34; receivedTimestamp"日期字段,其所有值均来自2016年3月和4月。我试图计算日期范围内每个操作的数量。
当我运行时:
db.getCollection('foo').aggregate([
{"$group": {"_id": "$action", "count": {"$sum": 1}}}
])
我得到68个结果。
当我运行时:
db.getCollection('foo').aggregate([
{"$match": {"receivedTimestamp": {"$gte": new Date("2016-01-01")}}},
{"$group": {"_id": "$action", "count": {"$sum": 1}}}
])
我得到68个结果。
当我运行时:
db.getCollection('foo').aggregate([
{"$match": {"receivedTimestamp": {"$gte": new Date("2017-01-01")}}},
{"$group": {"_id": "$action", "count": {"$sum": 1}}}
])
我得到68个结果。
当我运行时:
db.getCollection('foo').aggregate([
{"$match": {"receivedTimestamp": {"$lte": new Date("2017-01-01")}}},
{"$group": {"_id": "$action", "count": {"$sum": 1}}}
])
我得到0结果。
当我运行时:
db.getCollection('foo').aggregate([
{"$match": {"receivedTimestamp": {"$lte": new Date("2016-01-01")}}},
{"$group": {"_id": "$action", "count": {"$sum": 1}}}
])
我得到0结果。
因此,我真的开始认为Mongo聚合的日期范围已经破裂。我错了吗?
答案 0 :(得分:0)
通过切换到ISODate来解决这个问题:
当我运行时:
db.getCollection('foo').aggregate([
{"$match": {"receivedTimestamp": {"$gte": new ISODate("2016-01-01")}}},
{"$group": {"_id": "$action", "count": {"$sum": 1}}}
])
我得到68个结果。
当我运行时:
db.getCollection('foo').aggregate([
{"$match": {"receivedTimestamp": {"$gte": new ISODate("2017-01-01")}}},
{"$group": {"_id": "$action", "count": {"$sum": 1}}}
])
我得到0结果。
当我运行时:
db.getCollection('foo').aggregate([
{"$match": {"receivedTimestamp": {"$lte": new ISODate("2016-01-01")}}},
{"$group": {"_id": "$action", "count": {"$sum": 1}}}
])
我得到0结果。
当我运行时:
db.getCollection('foo').aggregate([
{"$match": {"receivedTimestamp": {"$lte": new ISODate("2017-01-01")}}},
{"$group": {"_id": "$action", "count": {"$sum": 1}}}
])
我得到68个结果。
这是我期望看到的行为。我不知道在这种情况下使用ISODate的要求的任何文件。