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.4PyMongoバージョン2.1.1

4

2 に答える 2

3

PyMongoでwhere式を使用するには、次のことを試してください。{ $where: "this.a % 4 >= 2" }

$mod演算子は、そのような条件では機能しません。3つの選択肢があります。

  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バージョンを使用する必要があります。作成したカーソルのwhereメソッドを使用してPyMongoでこれを実行できるはずです。Fe:

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