有没有办法用原子操作切换MongoDB中一个文档的布尔领域? 说,(在Python中)
cl.update({"_id": ...}, {"$toggle": {"field": 1}})
有没有办法用原子操作切换MongoDB中一个文档的布尔领域? 说,(在Python中)
cl.update({"_id": ...}, {"$toggle": {"field": 1}})
现在,我不认为这是可能的一个操作来做到这一点。 位运算符(http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit)没有“$ XOR”但尽管我一个补丁吧。
现在的解决办法,我认为想的是总是用“$ INC”:
cl.update( { "_id": ...}, { '$inc' : { 'field' : 1 } } );
然后,而不是检查真的还是假的,你可以做什么检查项目是否是“真”:
cl.find( { "_id": ..., 'field' : { '$mod' : [ 2, 1 ] } );
IE浏览器,您可以使用模运算符,看看它是否是均匀或不均匀甚至是“未设置”,和正在不均“设置”。 如果你想拥有oppposite行为(即,发现没有标志设置的所有项目),然后使用
[2,0];
该SERVER-4362的问题,现在实际上解决,你有$bit
更新运营商提供。 因此,伴随着它的xor
参数,你现在可以在一个原子操作做到这一点:
cl.findOneAndUpdate(
{ "_id": ...},
{
"$bit": {
"field": { "xor": NumberInt(1) }
}
},
{ "returnNewDocument": true, "upsert": true }
);
所以只要字段的值保持在0
或1
,然后按位“翻转”将导致,使电流值的它是在变形例的时间相反。
所述.findOneAndUpdate()
不是必需的,而只是一个表明所得到的值是在每个修改不同的方式。