Angenommen, ich füge das Dokument ein.
post = { some dictionary }
mongo_id = mycollection.insert(post)
Angenommen, ich möchte ein Feld hinzufügen und es aktualisieren. Wie mache ich das? Das scheint nicht zu funktionieren .....
post = mycollection.find_one({"_id":mongo_id})
post['newfield'] = "abc"
mycollection.save(post)
mycollection.find_one_and_update({"_id": mongo_id}, {"$set": {"newfield": "abc"}})
sollte hervorragend für Sie arbeiten. Wenn kein ID-Dokument vorhanden ist, schlägt
mongo_id
dies fehl, sofern Sie es nicht auch verwendenupsert=True
. Dies gibt standardmäßig das alte Dokument zurück. Um den neuen zu bekommen, bestehen Siereturn_document=ReturnDocument.AFTER
. Alle Parameter sind in der API beschrieben .Die Methode wurde für MongoDB 3.0 eingeführt. Es wurde um 3.2, 3.4 und 3.6 erweitert.
quelle
Ich werde
collection.save(the_changed_dict)
diesen Weg benutzen . Ich habe das gerade getestet und es funktioniert immer noch für mich. Folgendes wird direkt zitiert auspymongo doc.
:save(to_save[, manipulate=True[, safe=False[, **kwargs]]])
quelle
Dies ist eine alte Frage, aber ich bin darauf gestoßen, als ich nach der Antwort gesucht habe, also wollte ich das Update der Antwort als Referenz geben.
Die Methoden
save
undupdate
sind veraltet.im speziellen Fall des OP ist es besser zu verwenden
replace_one
.quelle
Gemäß der neuesten Dokumentation zu PyMongo mit dem Titel Einfügen eines Dokuments (Einfügen ist veraltet) und dem folgenden defensiven Ansatz sollten Sie Folgendes einfügen und aktualisieren:
result = mycollection.insert_one(post) post = mycollection.find_one({'_id': result.inserted_id}) if post is not None: post['newfield'] = "abc" mycollection.save(post)
quelle