如何在具有原子操作的一个文档中切换一个布尔字段?
-
13-11-2019 - |
题
是否有任何方法可以用原子操作在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
不是必需的,但只是一个展示所得值在每种修改时产生的值不同。
不隶属于 StackOverflow