1

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 版

4

2 回答 2

3

要在 PyMongo 中使用 where 表达式,试试这个:{ $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在自己的领域。

于 2012-04-30T09:38:27.450 回答
2

我认为您目前无法通过简单的查询来执行此操作,您必须改用您的 javascript 版本。您应该能够使用 PyMongo 使用创建的光标上的where方法来做到这一点。铁:

cursor = collection.find().where( "this.a % 4 >= 2" );
于 2012-04-30T09:40:18.017 回答