MongoDB中的Mod运算符

时间:2012-04-30 09:00:57

标签: python mongodb pymongo mongodb-query

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

2 个答案:

答案 0 :(得分: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存储在自己的字段中。

答案 1 :(得分:2)

我认为您目前不能通过简单的查询来执行此操作,而您必须使用您的javascript版本。您应该可以使用创建的游标上的where方法使用PyMongo执行此操作。 F.e:

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