2013-08-22 18 views
9

PyMongoを使用して、MongoDBに提出したいリストにdictのセットがあります。リスト内の項目の一部は新しい項目で、一部は更新する項目です。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呼び出しでこれを行う方法はありますか?より良いperfomancesのために、 "一括"アップデートのような何か。 – John

+0

@Johnこれを一括して行う方法を見つけましたか? insert_manyに似た何か – Sam

6

あなたはまたpymongo 3.0以降の場合は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

_ドキュメントから:_ **非推奨** - ['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