我正在尝试使用 pymongo 和 python 从这些 mongodb 集合中检索文档。
{
"fees": "0.00",
"trigger": "immediate",
"price": "18.30000000",
"recordTimestamp": "2023-01-10T12:03:27.197000Z"
},
{
"fees": "4.00",
"trigger": "immediate",
"price": "12.30000000",
"recordTimestamp": "2023-02-10T12:03:27.197000Z"
},
{
"fees": "1.00",
"trigger": "immediate",
"price": "10.30000000",
"recordTimestamp": "2023-03-10T12:03:27.197000Z"
}
如果我使用 mongoDB 指南针并执行此过滤器
{recordTimestamp: {$gte: '2023-01-24',$lte: '2023-03-01'}}
我得到的结果低于预期。
{
"fees": "4.00",
"trigger": "immediate",
"price": "12.30000000",
"recordTimestamp": "2023-02-10T12:03:27.197000Z"
}
但是,当我在 pymongo 中使用相同的过滤器时,我什么也没得到。
stdateval = datetime(2023,1,24)
endateval = datetime(2023,3,1)
dtFilter = { "recordTimestamp" : {"$gte": stdateval,"$lt": endateval}}
collection = DBModule.database[collectionName]
jsnObj_list = collection.find(dtFilter)
我做错了什么?
顺便说一句,我尝试了这个替代方案,它也得到了预期的结果。但不能使用 pymongo find 选项。
stdateval = datetime(2023, 1, 24)
endateval = datetime(2023, 3, 1)
jsnObj_list = collection.find({})
filtered_list = []
for item in jsnObj_list:
recordTimestamp = datetime.strptime(item['recordTimestamp'], "%Y-%m-%dT%H:%M:%S.%fZ")
if stdateval <= recordTimestamp < endateval:
filtered_list.append(item)
理想情况下,您应该将日期存储为 BSON 日期类型。如果你被字符串困住了,那么你可以这样做:
stdateval = '2023-01-24'
endateval = '2023-03-01'
dtFilter = { "recordTimestamp" : {"$gte": stdateval,"$lt": endateval}}
分享我找到的解决方案。
使用过滤器解决
{
"$or" : [
{ 'recordTimestamp': {$gte: '2023-01-24'} },
{ 'recordTimestamp': {$lte: '2023-03-01'} }
] }