You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB日期区间查询异常:不应返回文档却返回结果

MongoDB数组日期区间查询返回意外结果的原因排查

你遇到的问题是MongoDB对数组字段的查询逻辑导致的。当直接对数组字段dates使用$gte和$lt组合条件时,MongoDB的判断逻辑是:数组中存在至少一个元素满足$gte条件,同时存在至少一个元素满足$lt条件(两个元素可以是数组里不同的项),而不是要求数组中存在某一个元素同时满足两个条件。

看你的数据:

  • 数组里的2023-04-23T14:37:02.937Z满足$gte: ISODate('2023-04-18')
  • 数组里的2023-04-08T14:37:02.937Z、2023-04-15T14:37:02.937Z都满足$lt: ISODate('2023-04-20')

所以MongoDB认为这个文档符合查询条件,因此返回了它。

如果你需要查询数组中存在某一个元素同时落在日期区间内的文档,需要使用$elemMatch操作符,正确的查询语句应该是:

{ dates: { $elemMatch: { $gte: ISODate('2023-04-18'), $lt: ISODate('2023-04-20') } } }

这个查询会检查数组中是否有单个元素同时满足>=2023-04-18且<2023-04-20,这样就不会返回你的目标文档了。

内容的提问来源于stack exchange,提问作者Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:32:01