pymongo 和 python:使用日期过滤器查找文档的问题

问题描述 投票:0回答:2

我正在尝试使用 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)
python python-3.x mongodb datetime pymongo
2个回答
0
投票

理想情况下,您应该将日期存储为 BSON 日期类型。如果你被字符串困住了,那么你可以这样做:

stdateval = '2023-01-24'
endateval = '2023-03-01'
dtFilter = { "recordTimestamp" : {"$gte": stdateval,"$lt": endateval}}

0
投票

分享我找到的解决方案。

使用过滤器解决

{
  "$or" : [
   { 'recordTimestamp': {$gte: '2023-01-24'} },
   { 'recordTimestamp': {$lte: '2023-03-01'} }
   ]  }
© www.soinside.com 2019 - 2024. All rights reserved.