当前位置: 首页 > 知识库问答 >
问题:

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

轩辕炎彬
2023-03-14

我试图在我的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个答案

冉子石
2023-03-14

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

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

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

 类似资料:
  • 大家好,我有一个大问题在查询我的数据。我有这样的文件: 我想构建两个查询: 1)每天计算标签的数量,然后输出,例如,如下所示: 2)另一个是相同的,但我想设置一个期间从2016-12-13到2016-12-17。 对于第一个查询,我编写了这个查询,并得到了我所搜索的内容,但是在Spring Data Mongo中,我不知道如何编写。

  • 我试图自定义Grails应用程序的日志配置,但appender(及其布局模式)似乎被忽略了。 在配置中。非常棒: Log4J实际上考虑了logger部分(例如,如果我对hibernate的debug和trace行进行注释,那么hibernate语句的记录将按预期停止)。 但我一直在尝试appenders部分的不同版本,似乎都没有考虑,实际上应用于控制台的格式只包括消息本身(例如,如果我编写 在代码

  • 因此,我想运行一个查询来检索过去15天的所有与dateofActivity有关的信息。所以我使用了以下查询: 然后我注意到返回的记录并不局限于过去15天的所有活动。然后我尝试运行查询: 这并不限制查询记录。返回的记录包含了2020年12/27/的一些数据。我在查询中哪里做错了? 另外,基于这个dateofActivity字段检索过去一个月的结果的最佳方法是什么?例如,如果我想在每月的第一天运行此报

  • JNA还加载正确的库。 这里有人知道为什么不起作用吗?是因为我使用的是带有清单的jar应用程序文件吗? 有人有类似的问题吗?

  • 我试图使用ObjectId作为创建日期持有人,在尝试执行聚合查询时遇到了一些问题。特别是,我们希望使用日期聚合运算符按月份对文档进行分组,但该运算符显然不适用于ObjectId。是否有办法解决这个问题,或者我必须开始在每个文档中使用单独的CreationTime字段? 下面是我尝试的一个查询-

  • 我不熟悉Mongo中的聚合查询,并且一直在努力产生我想要的输出。我有以下聚合查询: 返回以下结果: 如何修改聚合查询,以便只返回2个文档而不是3个文档?将两个“ABC-123”结果合并为一个结果,并使用带有“bu”和“count”字段的新计数数组,即。 非常感谢