web-dev-qa-db-fra.com

Python - Pymongo Insérer et mettre à jour des documents

En utilisant PyMongo, j'ai un ensemble de dict dans une liste que j'aimerais soumettre à ma MongoDB. Certains éléments de la liste sont de nouvelles entrées et d'autres doivent être mis à jour.

Exemple:

Sur la base de données du serveur:

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

Pour envoyer à la base de données:

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

J'utilise actuellement les éléments suivants pour insérer des documents, mais comment puis-je faire quelque chose comme indiqué ci-dessus? Toute aide est appréciée!

collection.insert(myDict)
11
Dustin

Utilisez l'option 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)
18
Roman Pekar

Vous pouvez également utiliser 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)
7
lovesh

Pour pymongo 3.0 et versions ultérieures:

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)

Réf: http://api.mongodb.org/python/current/api/pymongo/collection.html

1
TheMI