我试图在我的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语句忽略指定的日期间隔。
有谁能帮我解决这一点吗?
删除$match
的$date
字段上的$
前缀:
{ $match: {
keywordGroupId: 75,
date: {$gte: ISODate("2013-01-01T00:00:00.0Z"), $lt: ISODate("2013-02-01T00:00:00.0Z")}
}},
只有当字段名在值中使用时,才使用$
前缀,而不是作为键使用。