Warum nicht einem einfachen Beispiel: ein Datensatz mit update_one raise ValueError?
Möchte ich einen Datensatz hinzufügen in die Sammlung, wenn der Schlüssel nicht bereits vorhanden ist. Ich verstehe [MongoDB][1] bietet die upsert
für diese, so habe ich eine
db.collection.update({"_id":"key1"},{"_id":"key1"},True)
Diese scheint zu funktionieren.
Jedoch in der Pymongo Dokumentation er sagt, dass update ist veraltet und die Verwendung zu update_one()
.
Aber:
db.collection.update_one({"_id":"key1"},{"_id":"key1"},True)
Gibt:
raise ValueError('update only works with $ operators')
ValueError: update only works with $ operators
Ich nicht wirklich verstehen, warum update_one
anders ist, und warum ich benötigen ein $
Betreiber. Kann mir jemand helfen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, weil Sie nicht angeben, eine update-operator.
Zum Beispiel
$Satz
dieid
Wert verwenden:Beachten Sie, dass in der Mongo-shell, diese wird ersetzen Sie einfach das Dokument mit dem neuen Dokument.
Verwenden
replace_one()
stattupdate_one()
. der 3. parameter vonreplace_one()
istupsert
auch.Meiner persönlichen Meinung nach ist diese Umsetzung der
update_one()
ist inkonsistent mit dem Verhalten der MongoDB-client. Dieupsert
option inupdate_one()
ist eigentlich bedeutungslos. Aber die Entwickler von pyMongo kann nur mit diesem zu unterscheidenupdate_one()
undreplace_one()
.update_one
ist ungültig undreplace_one
ist. Gilt für die C++ - Treiber, übrigens auch.