Check if MongoDB upsert did an insert or an update

Yes there is, on a safe call (or getLastError) the update function will return an array with an upsert field and a updatedExisting field.

You can read the PHP version of this here: http://php.net/manual/en/mongocollection.insert.php towards the bottom.

As it says within the documentation on upserted:

If an upsert occured, this field will contain the new record's _id field. For upserts, either this field or updatedExisting will be present (unless an error occurred).

So upserted contains the _id of the new record if a insert was done or it will increment updatedExisting if it updated a record.

I am sure a similar thing appears in all drivers.

Edit

It will actually be a boolean in the updatedExisting field of true or false


For reference only, in node.js:

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