在这篇文章中,接受的答案解释了你不能在upsert操作下$set
和$setOnInsert
在upsert操作中使用相同的字段.
有人可以解释为什么会这样吗?看起来$setOnInsert
不应该与之冲突$set
,因为前者在插入文档时使用,后者在文档更新时使用.
$ set运算符也用于upsert。因此,在$ set和$ setOnInsert上引用相同的字段是胡说八道。
只需在一个空集合上尝试一下:
db.items.remove();
db.items.update({},{$set:{a:1},$setOnInsert:{b:2}},{upsert:1})
db.items.find({});
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到了这个问题。如果有人正在寻找解决方案,您需要了解 $set 和 $setOnInsert 机制如何工作 $set 如果找到则刷新(忽略 $setOnInsert) $setOnInsert 插入一条新记录(然后执行 $set)我不知道这一点并且认为只有一名操作员可以工作。这样我就能够摆脱重复的字段