[英]How to create dynamic PyMongo query handling ISODate?
我正在開發一個 Flask REST API 它將具有三個查詢參數(HomeDevice、Key、UpdateDate),全部作為字符串傳遞。 現在,我必須使用這三個輸入作為過濾器對 Mongodb 進行 PyMongo 查詢。
typeof db.getCollection('collection_name').findOne().updatedate
>> Object
import json
from pymongo import MongoClient
import pandas as pd
client = MongoClient(<ServerAddress>,27017)
db = client.db_name
col = db.collection_name
updatedate="2020-01-13 06:43:47.500Z"
print(updatedate)
var = '{ "$and" : [{"homeDevice" : "Loader"} , {"key" : "OP2561NX" },{"updatedate" : ISODate("2020-01-13 06:43:47.500Z")}]}'
data = json.loads(var)
docs = pd.DataFrame(list(col.find(data)))
print(docs)
ISODate(updateDate) 導致 JSONDecodeError,刪除 ISODate 轉換后,查詢獲取空幀。
JSONDecodeError Traceback (most recent call last)
<ipython-input-12-95360c676df4> in <module>
11
12 var = '{ "$and" : [{"homeDevice" : "Loader"} , {"keyed" : "OP2561NX" },{"updatedate" : ISODate("2020-01-13 06:43:47.500Z")}]}'
---> 13 data = json.loads(var)
14 docs = pd.DataFrame(list(col.find(data)))
15 print(docs)
E:\Analytics\Installations\Anaconda3\lib\json\__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
346 parse_int is None and parse_float is None and
347 parse_constant is None and object_pairs_hook is None and not kw):
--> 348 return _default_decoder.decode(s)
349 if cls is None:
350 cls = JSONDecoder
E:\Analytics\Installations\Anaconda3\lib\json\decoder.py in decode(self, s, _w)
335
336 """
--> 337 obj, end = self.raw_decode(s, idx=_w(s, 0).end())
338 end = _w(s, end).end()
339 if end != len(s):
E:\Analytics\Installations\Anaconda3\lib\json\decoder.py in raw_decode(self, s, idx)
353 obj, end = self.scan_once(s, idx)
354 except StopIteration as err:
--> 355 raise JSONDecodeError("Expecting value", s, err.value) from None
356 return obj, end
JSONDecodeError: Expecting value: line 1 column 81 (char 80)
直接在 monogodb (Robo3T) 中運行此查詢會返回數據。 我需要一種動態創建查詢並在更新鍵上應用 ISODate 的方法。
如何創建動態 PyMongo 查詢來處理 ISODate?
像字典一樣構造var
:
var = { "$and" : [{"homeDevice" : "Loader"} , {"key" : "OP2561NX" },{"updatedate" : ISO("2020-01-13 06:43:47.500Z")}]}
並像這樣使用它:
col.find(var)
您不需要將其轉換為字符串/JSON。
試試上面的,讓我知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.