Actualizar con upsert=true
se puede usar para realizar una "inserción o actualización" atómica (http://docs.mongodb.org/manual/core/update/#update-operations-with-the-upsert-flag
).
Por ejemplo, si queremos asegurarnos de que un documento en la colección Front con una url
específica se inserta exactamente una vez, podríamos ejecutar algo como:
db.Front.update(
{url: 'http://example.com'},
{$set: {
url: 'http://example.com'},
found: true
}
)
Las operaciones en un solo documento en MongoDB son siempre atómicas. Si realiza actualizaciones que abarcan varios documentos, no se garantiza la atomicidad. En tales casos, puede preguntarse:¿realmente necesito que las operaciones sean atómicas? Si la respuesta es no, entonces probablemente encontrará la manera de trabajar con datos potencialmente inconsistentes. Si la respuesta es sí y desea continuar con MongoDB, consulte el patrón de diseño en Confirmaciones de dos fases .