PyMongoを使用して、MongoDBに送信したいリストに一連のdictがあります。リストの一部の項目は新しいエントリであり、一部は更新されます。
例:
サーバーデータベース:
[{"_id" : 1, "foo" : "bar}]
データベースに送信するには:
[{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}]
現在、以下を使用してドキュメントを挿入していますが、上記のようにするにはどうすればよいですか?どんな助けでもありがたいです!
collection.insert(myDict)
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)
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)
データを更新(または挿入)するには、upsert
を使用する必要があります
from pymongo import MongoClient
client = MongoClient()
collection = client.my_database.my_collection
objects = [{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}]
for obj in objects:
collection.replace_one({"_id": obj["_id"]}, obj, upsert=True)
使用する replace_one
をupdate
メソッドとして 非推奨 :
一括更新を使用する場合:
from pymongo import ReplaceOne
update_objects = list()
for obj in objects:
update_objects.append(ReplaceOne( {'_id': obj['_id']}, obj, upsert=True))
collection.bulk_write(update_objects)
Pymongo 3.0以降の場合:
import pymongo
con = pymongo.MongoClient()
collection = con.db_name.collection_name
docs = [{"_id" : 1, "foo" : "HELLO"}, {"_id" : 2, "Blah" : "Bloh"}]
for d in docs:
collection.update_many({'_id':d['_id']}, d,True)
参照: http://api.mongodb.org/python/current/api/pymongo/collection.html