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