2012-04-30 39 views
1

什麼是MongoDB中正確的語法返回符合以下條件的所有查詢:Mod運算MongoDB中

a % 4 >= 2 

我試着用下面的命令,但它返回空

db.data.find({ a : { $mod : [ 4, { $gte : 2 } ] } }); 

另一種選擇將使用Javascript表達式如下:

db.data.find("this.a % 4 >= 2"); 

Javascript表達式工作和返回預期的文件,但它不能從PyMongo中運行。

MongoDB的版本2.0.4
PyMongo版本2.1.1

+0

a%4> = 3相當於效率更高的%4 == 3。這是不可能的,%4> 3。 – Corbin

+0

好吧,不好的例子,我修正了上面的例子到%4> = 2 – carbotex

+0

只是好奇心:你用什麼查詢?我個人從未需要$ mod。因此,我想知道它的用途。 – rwitzel

回答

1

我不認爲你可以用一個簡單的查詢來做到這一點,你必須改用你的javascript版本。你應該可以用PyMongo在創建的遊標上使用where方法來做到這一點。 F.e .:

cursor = collection.find().where("this.a % 4 >= 2"); 
+0

我希望MongoDB將在未來提供對按位操作的支持,但是這個解決方法暫時會做。謝謝,它的作品。 – carbotex

+0

MongoDB支持簡單的按位運算符進行修改。有關查詢,請訪問https://jira.mongodb.org/browse/SERVER-3518 – Derick

3

要使用PyMongo一個地方表達,試試這個:{ $where: "this.a % 4 >= 2" }

$mod運營商根本不具有這樣的條件語句工作。您有三種選擇:

  1. 使用WHERE表達
  2. 使用表達式像這樣:

    db.data.find({ $or : [ { a : { $mod : [ 4, 2 ] } }, 
             { a : { $mod : [ 4, 3 ] } } 
             ] }); 
    
    db.data.find({ $and : [ { a : { $not : { $mod : [ 4, 0 ] } } }, 
             { a : { $not : { $mod : [ 4, 1 ] } } } 
             ] }); 
    
  3. 商店a % 4在自己的領域。

+0

如果數字很小,上面的'$或'的答案是最好的,因爲它不涉及Javascript評估。 – Tobia