有没有办法在MongoDB中用原子操作切换一个文档的布尔字段?比如(用python)

cl.update({"_id": ...}, {"$toggle": {"field": 1}})

推荐答案

现在,我不认为一次手术就能做到这一点.位运算符(http://www.mongodb.org/display/DOCS/Updating#Updating-%24位)还没有"$xor",尽管我有一个补丁.

现在我想到的解决方法是总是使用"$inc":

cl.update( { "_id": ...}, { '$inc' : { 'field' : 1 } } );

然后,您可以判断项目是否为"真",而不是判断是否为真:

cl.find( { "_id": ..., 'field' : { '$mod' : [ 2, 1 ] } );

也就是说,你可以使用模运算符来查看它是均匀的还是不均匀的,偶数为"unset",不均匀为"set".如果你想拥有Opposite行为(即,找到所有没有设置标志的项目),那么使用

[ 2, 0 ];

Mongodb相关问答推荐

基于另一子文档更改子文档的引用

如何从MongoDB集合中获取第一个和最后一个元素?

在MondoDB中:将对象数组从切片索引数组切片,并通过聚合推入数组

如何在Golang保存到MongoDB时排除空数据值的问题?

仅当特定字段存在于 MongoDB 中时才更新它

MongoDB - 家庭作业(job)帮助.不确定如何在 mongodb 中访问文档中的变量

使用 AngularJs 和 MongoDB/Mongoose

更新 mongodb 文档中的特定字段

使用 MongoDb 处理迁移

在 Heroku 上使用 Node 读取、写入和存储 JSON

MongoDB .NET 未在 upsert 上生成 _id

mongodb 中的 --bindip 配置选项有什么作用?

pymongo 排序和 find_one 问题

ExpressJS & Mongoose REST API struct :最佳实践?

MongoDb 数据库与集合

Mongodb KeyFile 太开放权限

如何在 MongoDB 的 $match 中使用聚合运算符(例如 $year 或 $dayOfMonth)?

pre save和validate之间的mongoose区别?什么时候用哪一个?

如何使用 mongodb-java-driver 进行 upsert

如何使用 Spring 的 MongoTemplate 和 Query 类检索字段子集?