Mongodb - $ set和$ setOnInsert中的重复字段

jtm*_*mon 13 upsert mongodb

这篇文章中,接受的答案解释了你不能在upsert操作下$set$setOnInsert在upsert操作中使用相同的字段.

有人可以解释为什么会这样吗?看起来$setOnInsert不应该与之冲突$set,因为前者在插入文档时使用,后者在文档更新时使用.

hem*_*mme 5

$ 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)

  • 这不是“废话”。例如,如果刚插入文档,我需要一个字段为“ true”,如果刚被更新,则需要为“ false”。如果在$ set`(作为false)和$ setOnInsert`(作为true)中都存在相同的字段,并且插入了文档,则$ setOnInsert`中的字段也应优先考虑在“ $ set”部分。 (18认同)

小智 5

我遇到了这个问题。如果有人正在寻找解决方案,您需要了解 $set 和 $setOnInsert 机制如何工作 $set 如果找到则刷新(忽略 $setOnInsert) $setOnInsert 插入一条新记录(然后执行 $set)我不知道这一点并且认为只有一名操作员可以工作。这样我就能够摆脱重复的字段