5

可能重复:
在 MongoDB 中,如何使用原子操作切换一个文档中的布尔字段?

我需要更新一个文档值,“切换”它:

该集合是具有布尔标志“isAdmin”的“评论”。

我将更新给定的评论 ID,如果它是真的,则将 isAdmin 设置为 false,反之亦然。

但是,这不起作用:

db.comments.update( { "id": "xxx" }, { $set: { isAdmin: $not isAdmin } } );

什么是正确的语法?

4

1 回答 1

15

您无法引用在这样的更新中找到的文档。您需要进行查询以查找文档,然后在知道值是什么后进行更新。两步流程:

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 现在可以通过$bitoperatorxor和使用findOneAndUpdate来避免两个单独的命令。

于 2012-09-23T18:03:52.770 回答