"切换"在MongoDB中查询

时间:2012-09-23 17:52:24

标签: mongodb

  

可能重复:
  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 } } );

什么是正确的语法?

1 个答案:

答案 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来避免两个单独的命令。