提问者:小点点

mongo:匹配聚合查询中的日期似乎被忽略


我试图在我的mongo DB中运行一个聚合语句。我有一个文档,其结构(至少)如下:

{
   "_id": ObjectId,
   "date": ISODate,
   "keywordGroupId": NumberLong,
   "ranking": NumberLong,
}

我想运行一个聚合语句,聚合给定'keyword groupid'和给定'date'间隔的'ranking'字段。

我一直在尝试使用以下聚合命令:

{ 
    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" } } }
    ]
}

此命令执行时不会出错并返回结果。如果我尝试更改'keyword groupid'字段的值,该命令将返回一个不同的值,因此我假设$match语句适用于该字段(NumberLong)。但是,如果我更改了“date”范围,并且指定了一个数据库中没有任何数据的时间间隔,它仍然会返回一个结果(我实际上希望有一个空的结果集)。所以我必须假设$match语句忽略指定的日期间隔。

有谁能帮我解决这一点吗?


共1个答案

匿名用户

删除$match$date字段上的$前缀:

{ $match: { 
    keywordGroupId: 75, 
    date: {$gte: ISODate("2013-01-01T00:00:00.0Z"), $lt: ISODate("2013-02-01T00:00:00.0Z")}
}},

只有当字段名在值中使用时,才使用$前缀,而不是作为键使用。