2016-12-12 63 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