我想在我的mongo数据库中运行聚合语句。我有其结构是(至少)如下文档:Mongo:匹配聚合查询中的日期似乎被忽略
{
"_id": ObjectId,
"date": ISODate,
"keywordGroupId": NumberLong,
"ranking": NumberLong,
}
我想运行聚合的“排名”字段对于给定的聚合语句“keywordGroupId”和给定的“日期”的时间间隔。
我一直在试图与以下aggregate命令:
{
aggregate : "KeywordHistory",
pipeline : [
{ $match: { keywordGroupId: 75 , "$date": {$gte: ISODate("2013-01-01T00:00:00.0Z"), $lt: ISODate("2013-02-01T00:00:00.0Z")}} },
{ $group: { _id: { null }, count: { $sum: "$ranking" } } }
]
}
这个命令执行没有错误并返回结果。如果我尝试更改'keywordGroupId'字段的值,该命令将返回不同的值,因此我假设$ match语句对该字段(NumberLong)有效。但是,如果我更改'日期'范围,并指定数据库中没有任何数据的时间间隔,它仍会返回一个结果(我实际上期望得到一个空的结果集)。所以我必须假定$ match语句忽略指定的日期间隔。
任何人都可以帮助我解决这个问题吗?
我已经尝试过没有'$',但它不工作。实际上,如果我删除它,查询总是返回一个空的结果集(即使我使用数据库中的日期间隔)。 – Marco 2013-02-22 14:11:01
我希望包含以下两个文档:“{date:”ISODate(“2013-01-06T00:00:00.0Z”), “keywordGroupId”{ “_id”:ObjectId(“511e2dca73ff275f250002e9”), “:NumberLong(75), ”排名“:NumberLong(13) }和{ ”_id“:的ObjectId(” 511e2dca73ff275f250002e8 “), ”keywordGroupId“:NumberInt(75), ”日期“:ISODate(” 2013-01-15T00:00:00。0Z “), ”排行榜“:NumberInt(11) }' – Marco 2013-02-22 14:21:51
虽然,我不希望在我的结果下列之一:'{ ”_id“:物件(” 511e2dca73ff275f250002e8" ), “keywordGroupId”: NumberInt(75), “date”:ISODate(“2012-12-16T00:00:00.0Z”), “ranking”:NumberInt(11) }'如果我运行上面的聚合命令日期),它也返回上面的文档,即使它不应该被包含,因为日期不在期望/表达的时间范围内。 – Marco 2013-02-22 14:23:50