是否有任何方法可以用原子操作在MongoDB中切换一个文档的布尔字段?说,(在Python)

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

有帮助吗?

解决方案

现在,我认为没有一个操作可以这样做。按位运算符(http://www.mongodb.org/display/docs/updating#apdating -%24bit)没有“$ XOR”,虽然我是一个补丁。

现在的解决方法我认为这是通过始终使用'$ INC':

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

而不是检查true或false,可以检查项目是否为“true”:

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

IE,您使用Modulo运算符查看它是否均匀或甚至是“未命令”,也是“设置”的不均匀。如果您希望具有对抗的行为(即,找到没有标志集的所有项目),则使用

[ 2, 0 ];

其他提示

server-4362 问题现在已经解决了,你有 $bit 更新操作员可用。所以随着它的是 xor 论点你现在可以这在原子学行动中:

cl.findOneAndUpdate( 
  { "_id": ...}, 
  { 
     "$bit": { 
         "field": { "xor": NumberInt(1) } 
     } 
  },
  { "returnNewDocument": true, "upsert": true }
);
. 因此,只要字段的值保持在生成的acticeTagcode或世代odicetagcode,那么就会导致按位“翻转”,使得当前值与修改时的相反。

0 不是必需的,但只是一个展示所得值在每种修改时产生的值不同。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top