w3schools tutorial delete create python mongodb mongodb-query pymongo

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() .