可能重复:
In MongoDB, How to toggle a boolean field in one document with atomic operation?
我需要更新文档值,“切换”它:
该集合是“Comment”,其布尔标志为“isAdmin”。
我要更新给定的评论ID,如果是真的则将isAdmin设置为false,反之亦然。
然而,这不起作用:
db.comments.update( { "id": "xxx" }, { $set: { isAdmin: $not isAdmin } } );
什么是正确的语法?
答案 0 :(得分:11)
您无法在此类更新中引用您找到的文档。您需要执行查询才能找到该文档,然后在知道该值之后进行更新。两步过程:
var doc = db.comments.findOne({id:"xxx"});
db.comments.update({id:"xxx"}, {$set: {isAdmin: !doc.isAdmin}});
更新:
这个答案已经过时了一段时间(从2.5.2开始):
https://jira.mongodb.org/browse/SERVER-4362
现在可以通过$bit
运算符xor
,并使用findOneAndUpdate
来避免两个单独的命令。