Well, from one point of view, anwer is “no,” and there is a good reason for this.
Generally speaking, MongoDB “update” operations are designed to work on what is usually a “multiple” document, which means anything that meets the criteria. So the general case here is that you either asked to update either singularly, or by choosing, or updated, or not depending on whether something was agreed.
In the context of “Bulk”, most of the same element is used, because there is either a matching criterion or not, in which case you will get return values for nMatched and nModified respectively, since there is also the possibility that the “consistent” document is actually not updated when the data to be changed is already the value that is the purpose of the change.
The last difference between nMatched and nModified is the main reason why you cannot reliably do this, "because not all agreed ones are necessarily changed.
However, you can specify the value of the guest in case of distinguishing between the "upsert" actions and the actual "updates". This will not be 100% due to the noted difference, but the main process is to compare your input list with the return value from getUpsertedIds() , which is a valid call.
ES6 syntax exception for the rest of the world currently:
var upserted = result.getUpsertedIds();
If the return result from .getUpsertedIds() is an array of objects containing both the "index" position from the bulk update and the generated or set _id value for "upsert".
[ { index: 0, _id: 1 } ]
So, comparing your input list with an “updated” list to see “what doesn't exist”, it basically returns those things that have probably just been changed. Of course, the caveat is that if the value was already the same as the modification, then it really was no modification.
But because of how the API should work, as close as you are going to get.