2014-10-08 92 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" }); 

或者預填充我的收藏與已算出異或值(以能夠使用索引)。