我刚刚从MongoDB 2.2版更新到2.6版,发现您无法再使用$set
方法中的$unset
和update
运算符使用空字典。例如,调用db.mytable.update({field:value}, {$set:{}})
过去只是保留文档未修改,但现在它引发了一个错误,说$set
的值不能为空。
有人可以证明为什么这是对旧行为的改进吗?对我来说,它只是创建了对额外逻辑的不必要的需求,例如if
语句,以确保在尝试update
之前该值不为空。
答案 0 :(得分:2)
SERVER-12266包含官方解释。特别是comment:
我今天与Scott Hernandez就此进行了交谈,他解释了围绕空修饰符的新严格性旨在提醒那些无意中发送空更新的用户。 [...]
这是否合理,我不能说。我想你可以通过在默认情况下将_id
(或其他常量字段)附加到$set
值来解决此问题。
答案 1 :(得分:1)