Comprueba si MongoDB upsert hizo una inserción 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.

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

Para referencia solamente, en node.js:

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

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)

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