5

Possible Duplicate:
In MongoDB, How to toggle a boolean field in one document with atomic operation?

I need to update a document value, "toggling" it:

The collection is "Comment" which has boolean flag "isAdmin".

I'm going to update a given comment id, setting isAdmin false if it's true and viceversa.

However this does not work:

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

What's the right syntax?

4

1 に答える 1

15

そのような更新で見つけたドキュメントを参照することはできません。クエリを実行してドキュメントを検索し、値がわかったら更新する必要があります。2 段階のプロセス:

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して、2 つの別個のコマンドを回避するために使用 できるようになりました。

于 2012-09-23T18:03:52.770 に答える