有没有办法在MongoDB中用原子操作切换一个文档的布尔字段?比如(用python)
cl.update({"_id": ...}, {"$toggle": {"field": 1}})
有没有办法在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 ];