3

私はMongoDB用のNode.jsドライバーを使用しており、$or構成をミックスに導入しようとするまで、find()の呼び出しの外部でクエリオブジェクトを構成することに問題はありません。

パラメーターの数が可変であり、パラメーターの数ほどcollection.findを呼び出さない方がよいため、クエリを動的に生成しようとしています。

そのために、私は次のような単純なクエリを使用しています。

var query = {};
query['name'] = 'Steve';
query['date_created'] = '<some date>';

mongo_collection.find(query, function(err, c) {});

ただし、$を使おうとすると、プロセス全体が崩壊します。

私は喜びなしで次のそれぞれを試しました:

var query = {};

1.1。

query[$or] = [ { 'field' : 'value1' }, { 'field' : 'value2' } ];
query['date_created'] = '<some date>';

2.2。

query = { $or : [ { 'field' : 'value1' }, { 'field' : 'value2' } ] };
query['date_created'] = '<some date>';

3.3。

query = eval("[ { 'field' : 'value1' }, { 'field' : 'value2' } ]");
query['date_created'] = '<some date>';

いずれの場合も、$orは引用符で囲まれ(正直なところ、これが問題かどうかはわかりません...)、クエリは失敗します。

これを達成する方法はありますか?

4

1 に答える 1

11

これを行う方法は次のとおりです(おそらく複数の方法があります)。

var query = {};

query["$or"]=[];
query["$or"].push({"field":"value1"});
query["$or"].push({"field":"value2"});
query["date_created"]="whatever";

query
{
    "$or" : [
        {
            "field" : "value1"
        },
        {
            "field" : "value2"
        }
    ],
    "date_created" : "whatever"
}

これで、db.collection.find(query)を実行できるようになります。

于 2012-06-02T04:34:36.703 に答える