nodejs - update array mongodb
¿Cuál es la diferencia entre replaceOne() y updateOne() en MongoDB? (2)
MongoDB
operaciones masivas de MongoDB
tienen dos opciones:
-
Agrega una única operación de actualización de documentos a una lista de operaciones masivas. La operación puede reemplazar un documento existente o actualizar campos específicos en un documento existente.
-
Agrega una única operación de reemplazo de documentos a una lista de operaciones masivas. Use el método Bulk.find () para especificar la condición que determina qué documento reemplazar. El método Bulk.find.replaceOne () limita el reemplazo a un solo documento.
De acuerdo con la documentación, ambos métodos pueden reemplazar un documento coincidente. ¿Entiendo correctamente, que updateOne()
es un método de propósito más general, que puede reemplazar el documento exactamente como replaceOne()
, o simplemente actualizar sus campos específicos?
Con replaceOne()
solo puede reemplazar todo el documento, mientras que updateOne()
permite actualizar campos.
Dado que replaceOne()
reemplaza todo el documento, se replaceOne()
los campos en el documento antiguo no contenido en el nuevo. Con updateOne()
se pueden agregar nuevos campos sin perder los campos del documento anterior.
Por ejemplo si tiene el siguiente documento:
{
"_id" : ObjectId("0123456789abcdef01234567"),
"my_test_key3" : 3333
}
Utilizando:
replaceOne({"_id" : ObjectId("0123456789abcdef01234567")}, { "my_test_key4" : 4})
resultados en:
{
"_id" : ObjectId("0123456789abcdef01234567"),
"my_test_key4" : 4.0
}
Utilizando:
updateOne({"_id" : ObjectId("0123456789abcdef01234567")}, {$set: { "my_test_key4" : 4}})
resultados en:
{
"_id" : ObjectId("0123456789abcdef01234567"),
"my_test_key3" : 3333.0,
"my_test_key4" : 4.0
}
Tenga en cuenta que con updateOne()
puede utilizar los operadores de actualización en documentos.
replaceOne()
reemplaza todo el documento, mientras que updateOne()
permite actualizar o agregar campos. Al utilizar updateOne()
, también tiene acceso a los operadores de actualización que pueden realizar actualizaciones de forma confiable en documentos. Por ejemplo, dos clientes pueden "simultáneamente" incrementar un valor en el mismo campo en el mismo documento y se capturarán ambos incrementos, mientras que con un reemplazo uno puede sobrescribir al otro, perdiendo uno de los incrementos.
Dado que replaceOne()
reemplaza todo el documento, se replaceOne()
los campos en el documento antiguo no contenido en el nuevo. Con updateOne()
se pueden agregar nuevos campos sin perder los campos del documento anterior.
Por ejemplo si tiene el siguiente documento:
{
"_id" : ObjectId("0123456789abcdef01234567"),
"my_test_key3" : 3333
}
Utilizando:
replaceOne({"_id" : ObjectId("0123456789abcdef01234567")}, { "my_test_key4" : 4})
resultados en:
{
"_id" : ObjectId("0123456789abcdef01234567"),
"my_test_key4" : 4.0
}
Utilizando:
updateOne({"_id" : ObjectId("0123456789abcdef01234567")}, {$set: { "my_test_key4" : 4}})
resultados en:
{
"_id" : ObjectId("0123456789abcdef01234567"),
"my_test_key3" : 3333.0,
"my_test_key4" : 4.0
}