2013-08-22 15 views
9

Używam PyMongo, mam zestaw dyktów na liście, który chciałbym przesłać do mojego MongoDB. Niektóre pozycje na liście są nowe, a niektóre są aktualizowane.Python - Pymongo Wstawianie i aktualizowanie dokumentów

Przykład:

na serwerze bazy danych:

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

do wysłania do bazy danych:

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

obecnie używam następujących wstawić dokumenty, ale jak czy zrobiłbym coś podobnego do powyższego? Każda pomoc jest doceniana!

collection.insert(myDict) 

Odpowiedz

12

Zastosowanie upsert opcja:

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

Czy można to zrobić za pomocą pojedynczego wywołania API? Coś w rodzaju "zbiorczej" aktualizacji, dla lepszej jakości wykonania. – John

+0

@John Czy wymyśliłeś sposób, aby zrobić to masowo? coś podobnego do insert_many – Sam

6

Można również użyć 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

_Froms: _ ** DEPRECATED ** - Użyj ['insert_one()'] (http://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection. Collection.insert_one) lub ['replace_one()'] (http://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection.Collection.replace_one) zamiast tego. – luckydonald

Powiązane problemy