2016-12-12 113 views
0

不同蒙戈文件的列表我有一個數據集,看起來像這樣:插入對象與pymongo

[{ 
    "myhost1.com": { 
     "services": [ 
      { 
       "environment": "prod", 
       "__module__": "polling_functions", 
       "serviceName": "service-a", 
       "__class__": "app" 
      } 
     ] 
    }, 
    "myhost2.com": { 
     "services": [ 
      { 
       "environment": "prod", 
       "__module__": "polling_functions", 
       "serviceName": "service-a", 
       "__class__": "db" 
      } 
     ] 
    }, 
    ... 

我想要做的是插入每一個這些在我的MongoDB一個單獨的文件。清洗鍵刪除.字符後,我已經試過兩個插件:

db.hostuse.insert_many(dataset)

for key in dataset[0]: 
    db.hostuse.insert_one(dataset[0][key]) 

這些都不完成我想,雖然。第一個插入一個文檔,鍵是主機名。第二個插入多個文檔,但沒有主機名;相反,每個密鑰都是services

我該如何轉換這個數據集,以便將它傳遞給我的MongoDB,並生成多個文檔,每個文檔的密鑰爲hostname

回答

1

像這樣:

collection = MongoClient().db.collection 
for hostname, services in dataset[0].items(): 
    collection.insert_one({'hostname': hostname, 
          'services': services}) 

你需要拉出來字典數據集[0],並在字典的每個鍵和值,插入一個單獨的文件。

+0

這主要是工作,而是存儲文件爲:'{ 「_id」:物件( 「584f175ee281af385ce8a6bc」), 「服務」:{ 「服務」: { ... } ] }, 「主機名」: 「myhost1.com」 }' - 注意重複的 「服務」 鍵/場。 – MrDuk

+0

出於我的目的,因爲我可以假設在每個「主機」部分中存在單個「服務」部分,因此將代碼更改爲使用'({'hostname':hostname,services.keys()[0]:services.values )[0]})'爲我工作 – MrDuk