为什么MongoDB不再允许使用$ set和$ unset一个空文档?

时间:2014-07-17 22:05:13

标签: mongodb

我刚刚从MongoDB 2.2版更新到2.6版,发现您无法再使用$set方法中的$unsetupdate运算符使用空字典。例如,调用db.mytable.update({field:value}, {$set:{}})过去只是保留文档未修改,但现在它引发了一个错误,说$set的值不能为空。

有人可以证明为什么这是对旧行为的改进吗?对我来说,它只是创建了对额外逻辑的不必要的需求,例如if语句,以确保在尝试update之前该值不为空。

2 个答案:

答案 0 :(得分:2)

SERVER-12266包含官方解释。特别是comment

  

我今天与Scott Hernandez就此进行了交谈,他解释了围绕空修饰符的新严格性旨在提醒那些无意中发送空更新的用户。 [...]

这是否合理,我不能说。我想你可以通过在默认情况下将_id(或其他常量字段)附加到$set值来解决此问题。

答案 1 :(得分:1)