我试图在我的mongo db中运行聚合语句.我有一份文件,其 struct (至少)如下:

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

我想运行一个聚合语句,为给定的"关键字组ID"和给定的"日期"间隔聚合"排名"字段.

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

{ 
    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语句忽略了指定的日期间隔.

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

推荐答案

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

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

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

Mongodb相关问答推荐

映射数组值并查找每个匹配的集合

在提供的文档(_Id)之后和之前,是否有一个Mongo操作来获取已排序(和/或过滤)集合中的文档计数?

聚合管道可以用于更新数据库中的文档吗?

如何对 MongoDB setWindowFields 中当前文档以外的文档进行操作

使用golang中的过滤器从mongodb复合集合中获取所有数据

通过 _id 更新一个文档(无效的 BSON 字段名称 _id)

使用 Spring Boot >= 2.0.1.RELEASE 将 ZonedDateTime 保存到 MongoDB 时出现 CodecConfigurationException

什么是 Mongoose (Nodejs) 复数规则?

mongodump 是否锁定数据库?

在 MongoDb 中查询小于 NOW 的日期时间值

使用 mgo 存储嵌套 struct

启动mongodb和express的正确方法?

RoR3 上的 Mongoid:1)如何在查询中返回特定字段? 2)需要什么 inverse_of ?

带有部分字符串的mongoose文本搜索

如何使用 mgo 和 Go 查询 MongoDB 的日期范围?

Mongodb $lookup 使用 _id 无效果

如何使用 mgo 从 golang 中的 mongodb 集合中 Select 所有记录

MongoDb 连接被拒绝

PyMongo 创建具有 2 个或更多字段的唯一索引

即使重新安装后,Mongo 仍在等待 27017