MongoDB是否支持XOR(异或)?

时间:2014-10-08 09:36:58

标签: mongodb

我正在寻找一种在MongoDB上进行异或的方法。

例如,$or按预期工作:

> db.mycollection.find({ '$or': [ { 'a': 1 }, { 'b': 1 } ] })

但我需要找到a为1或b为1的记录,但不是两者都有。像这样:

> db.mycollection.find({ '$xor': [ { 'a': 1 }, { 'b': 1 } ] })

(不起作用 - 虚构语法)

MongoDB是否支持XOR逻辑运算符?如果没有,怎样才能最好地模拟?

2 个答案:

答案 0 :(得分:5)

这是否满足您的期望?

db.mycollection.find({ '$or': [ { 'a': 1 , 'b' : {$ne : 1} }, { 'b': 1, 'a' : {$ne : 1} } ] })

答案 1 :(得分:2)

是的,它隐藏在$bit名称后面(仅适用于 2.6.x ),但不是您想要的xor (它是按位xor ):{ $bit: { <field>: { xor: <int> } } }并用于更新,而不是用于查找。

对于您的情况,我会使用$where

db.mycollection.find( { $where: "this.a ^ this.b" } );

或者使用已计算的xor值预先填充我的集合(以便能够使用索引)。