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 :(得分:3)
要在PyMongo中使用where表达式,请尝试以下操作:{ $where: "this.a % 4 >= 2" }
$mod
运算符根本不适用于这样的条件。你有三个选择:
使用如下表达式:
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 ] } } }
] } );
将a % 4
存储在自己的字段中。
答案 1 :(得分:2)
我认为您目前不能通过简单的查询来执行此操作,而您必须使用您的javascript版本。您应该可以使用创建的游标上的where方法使用PyMongo执行此操作。 F.e:
cursor = collection.find().where( "this.a % 4 >= 2" );