使用Node.js驱动程序生成动态mongodb查询

时间:2012-06-01 18:12:22

标签: javascript node.js mongodb

我正在使用MongoDB的Node.js驱动程序,并且在调用find()之外构建查询对象没有任何问题,直到我尝试在混合中引入$or构造。

我正在尝试动态生成查询,因为我有一个可变数量的参数,并且我希望没有尽可能多的对collection.find的调用,因为我有参数。

为此,我使用的查询简单如下:

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

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

然而,当我尝试使用$或整个过程崩溃时。

我已经尝试过以下各项而不感到高兴:

var query = {};

1

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

2

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

3

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

在每种情况下,$or都用引号括起来(老实说,我不确定这是不是问题......)并且查询失败。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:10)

以下是如何做到这一点(可能有多种方式):

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)