python - tutorial - pymongo find
¿Por qué upsert un registro usando update_one aumenta ValueError? (2)
Esto se debe a que no ha especificado ningún operador de actualización . Por ejemplo, para $set
el valor de id
use:
db.collection.update_one({"_id":"key1"}, {"$set": {"id":"key1"}}, upsert=True)
Tenga en cuenta que en el shell Mongo, esto simplemente reemplazará el documento con el nuevo documento.
Quiero agregar un registro a la colección si la clave aún no existe. Entiendo que [MongoDB] [1] ofrece la upsert
para esto, así que hice una
db.collection.update({"_id":"key1"},{"_id":"key1"},True)
Esto parece funcionar.
Sin embargo, en la documentación de Pymongo dice que la actualización está en desuso y se usa para update_one()
.
Pero:
db.collection.update_one({"_id":"key1"},{"_id":"key1"},True)
Da:
raise ValueError(''update only works with $ operators'')
ValueError: update only works with $ operators
Realmente no entiendo por qué update_one
es diferente y por qué necesito usar un operador $
. ¿Alguien puede ayudar?
Use replace_one()
lugar de update_one()
. el 3er parámetro de replace_one()
es upsert
.
db.collection.replace_one({"_id": "key1"}, {"_id": "key1"}, True)
Mi opinión personal es que esta implementación de update_one()
es inconsistente con el comportamiento del cliente MongoDB. La opción upsert
en update_one()
realidad no tiene sentido. Pero los desarrolladores de pyMongo pueden querer usar esto para distinguir update_one()
y replace_one()
.