updateone updatemany update modify existing example array mongodb

updatemany - update array mongodb



Comprueba si MongoDB upsert hizo una inserciĆ³n o una actualizaciĆ³n (4)

¡La respuesta fue tomada del libro "MongoDB Applied Design Patterns"! determinar si un upsert era un inserto o una actualización

No puedo encontrar esto en la documentación en ninguno de los lugares obvios. Me gustaría saber si es posible saber si Mongo ejecutó un inserto o una actualización en la operación de inserción.


Para referencia solamente, en node.js usando Mongoose 3.6:

model.update( findquery, updatequery, { upsert: true }, function(err, numberAffected, rawResponse) { ... });

Donde RawResponse se ve así cuando ha actualizado un documento existente:

{ updatedExisting: true, n: 1, connectionId: 222, err: null, ok: 1 }

Y se ve así cuando ha creado un nuevo documento:

{ updatedExisting: false, upserted: 51eebc080eb3e2208a630d8e, n: 1, connectionId: 222, err: null,

(Ambos casos devolverían numberAffected = 1)


Para referencia solamente, en node.js:

collection.update( source, target, { upsert: true }, function(err, result, upserted) { ... });


Sí, en una llamada segura (o getLastError) la función de actualización devolverá una matriz con un campo de inserción y un campoExistente actualizado.

Puede leer la versión de PHP aquí: http://php.net/manual/en/mongocollection.insert.php hacia la parte inferior.

Como dice en la documentación sobre upserted :

Si se produce un upsert, este campo contendrá el campo _id del nuevo registro. Para sugerencias, este campo o updatedExisting estarán presentes (a menos que ocurra un error).

Así que upserted contiene el _id del nuevo registro si se realizó una inserción o se incrementará updatedExisting si actualiza un registro.

Estoy seguro de que algo similar aparece en todos los controladores.

Editar

En realidad, será un valor booleano en el campo updatedExisting de true o false