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
相关产品推荐
相关产品推荐

