MongoDB基于ISODate的聚合管道查询无匹配结果问题求助
错误原因
- 核心错误为数据类型不匹配:MongoDB集合中
createdAt字段存储的是日期类型,你在查询语句中将比较值写为了字符串格式的"ISODate('2020-10-06T12:09:50.817Z')",MongoDB不会自动把这个字符串解析为日期对象,跨类型比较无法匹配到任何文档。 - 次要问题:Mongo Shell中的
ISODate()语法不能直接在Python(pymongo)环境中使用,需要用Python原生的日期对象进行查询。
修正方案
- 首先导入Python标准库的datetime模块:
from datetime import datetime
- 修改
$match语句中createdAt的筛选条件,使用datetime对象构造查询范围:
match = { "$match": { 'xRounds': { "$gt": 9 }, 'yRounds': { "$gt": 9 }, 'survey': {"$ne": None}, 'createdAt': { "$gt": datetime(2020, 10, 6, 12, 9, 50, 817000), "$lt": datetime(2021, 10, 7, 12, 9, 50, 817000) } } }
注意事项
如果你的createdAt字段存储时带有时区标识,需要构造带对应时区的datetime对象进行查询,避免时区偏移导致的筛选结果不符合预期,Python 3.9+可使用zoneinfo模块、低版本可使用pytz模块实现时区配置。
内容的提问来源于stack exchange,提问作者tigram10
相关产品推荐
相关产品推荐

