1

私はこのコードを持っています:

var regex={"$regex":req.query.query,"$options":req.query.options }  

db.collection('coders', function(err, collection) {
    collection.find(

    {"name":regex}

    ).toArray(function(err, items) {
    res.send(items);
    });

});

期待どおりにうまく機能します。「名前」の代わりに任意のフィールドを使用できるようにしたいので、これをテストしました:

    var regex={"$regex":req.query.query,"$options":req.query.options }

    var field="\"notName\""

db.collection('coders', function(err, collection) {
    collection.find(

    {field:regex}

    ).toArray(function(err, items) {
    res.send(items);
    });

});

これは機能しません。問題は何ですか?変数を使用して collection.find() を呼び出す正しい方法は何ですか?

4

2 に答える 2

2

find角括弧表記を使用して、呼び出しの外で引数オブジェクトを作成する必要があります。

var toFind = {};
toFind[field] = regex;

db.collection('coders', function(err, collection) {
    collection.find(toFind).toArray(function(err, items) {
        res.send(items);
    });
});
于 2013-03-01T10:01:28.497 に答える
1

Try this variant

var regex={"$regex":req.query.query,"$options":req.query.options }
var field="notName";
db.collection('coders', function(err, collection) {
        var findExpression = {};
        findExpression[field]=regex;
        collection.find(findExpression).toArray(function(err, items) {
        res.send(items);
        });
});
于 2013-03-01T10:02:55.170 に答える