2017-10-16 36 views
0

我已存儲在MongoDB中,其中的一個字段具有以下格式幾個文件:如何動態創建基於PyMongo Query的點符號?

文檔字段

{field1:{inner_field1:inner_value1, inner_field2:inner_value2, inner_field3:inner_value3}} 

我知道基於inner_value1,要查詢的文件,我需要使用點符號在蒙戈查詢象下面這樣:

{field1.innerfield1:inner_value1} 

在我的情況下,田野上,我需要搜索從MongoDB中的文件將由外方提供和它們可能嵌套也可能不嵌套。在這種情況下,如果我具有上面「文檔字段」中提到的原始字段,那麼如何動態創建基於「點符號」的查詢?原始字段值可能嵌套也可能不嵌套。

回答

0

一些試驗後,我想出了一個解決方案。在這裏張貼,因爲它可以作爲他人的引用:

input = {'field1':{'sub_field1':'sub_value1', 'sub_field2':'sub_value2', 'sub_field3':'sub_value3'}, 'field2':'value2'} 

new_dict = {} 

for k in input: 
    if (isinstance(input[k], dict)): 
     for l in input[k]: 
      new_key = k+"."+l 
      new_dict[new_key] = input[k][l] 
    else: 
     new_dict[k] = input[k] 
1

也許是這樣的:

field1 = "a" 
innerfield = "b" 
innvervalue = "c" 

collection = MongoClient().db.collection 
key = "%s.%s" % (field1, innerfield) 
for doc in collection.find({key: innvervalue}): 
    print(doc) 
+1

變化'collection.find({鍵,innvervalue})''來collection.find({鍵:innvervalue})',逗號是錯誤的。 – ALH

+0

感謝您的回覆。但是,當我不知道鍵和不知道輸入是否包含嵌套值時,我正在尋找如何動態執行它的答案。 – Jay