2013-08-22 58 views
9

使用PyMongo,我有一組dict在我想提交給我的MongoDB的列表中。列表中的一些項目是新條目,有些將更新。Python - Pymongo插入和更新文檔

例子:

在服務器數據庫:

[{"_id" : 1, "foo" : "bar}] 

發送給數據庫:

[{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}] 

我目前使用下面的插入文件,但如何我會做類似上面所述的事情嗎?任何幫助表示讚賞!

collection.insert(myDict) 

回答

12

使用upsert選項:

from pymongo import MongoClient 
cl = MongoClient() 
coll = cl["local"]["test2"] 

data = [{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}] 
for d in data: 
    coll.update({'_id':d['_id']}, d, True) 
+2

有沒有辦法通過單個API調用來做到這一點?類似「批量」更新,以獲得更好的性能。 – John

+0

@John你有沒有想辦法做到這一點?類似於insert_many的東西 – Sam

6

您還可以使用save

import pymongo 
con = pymongo.MongoClient() 
coll = con.db_name.collection_name 

docs = [{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}] 

for doc in docs: 
    coll.save(doc) 
+1

_From Docs:_ ** DEPRECATED ** - 使用['insert_one()'](http://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection。而不是使用Collection.insert_one)或['replace_one()'](http://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection.Collection.replace_one)。 – luckydonald