2014-10-08 91 views
4

我正在寻找一种方法来对MongoDB进行异或操作。MongoDB支持XOR(异或)吗?

例如,$or按预期工作:

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

但我需要找到记录,其中a为1或b为1,但不是他们两个。事情是这样的:

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

(不工作 - 虚构的语法)

不MongoDB的支持XOR逻辑运算符?如果不是,最好如何模拟?

+0

好问题,现在找最好的答案... – 2015-12-18 04:55:03

回答

4

这是否符合您的期望?

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

是的,这是隐藏在$bit名(仅适用于2.6.x的)的后面,但它是不是你想要的 XOR(它是按位异或):{ $bit: { <field>: { xor: <int> } } }和用于更新,而不是发现。

对于你的情况,我会用两种$where

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

或者预填充我的收藏与已算出异或值(以能够使用索引)。