In this post, the accepted answer explains that you cannot have the same fields under $set
and $setOnInsert
in an upsert operation.
Can someone explain why this is? It seems like the $setOnInsert
shouldn't conflict with $set
, since the former is used when a document is inserted, and the latter is used when the document is updated.
I faced this problem. If someone is looking for a solution, you need to understand how the $set and $setOnInsert mechanism works $set refreshes if found (ignoring $setOnInsert) $setOnInsert inserts a new record (and then executes $set) I did not know this and thought that only one operator would work. This way I was able to get rid of duplicate fields
$set operator is used on upsert too. So it's nonsense to refer same fields both on $set and $setOnInsert.
Just try this on an empty collection:
db.items.remove();
db.items.update({},{$set:{a:1},$setOnInsert:{b:2}},{upsert:1})
db.items.find({});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With