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

3

我正在使用Node.js驱动程序来操作MongoDB数据库,在find()调用之外构建查询对象没有问题,但当我尝试将$or操作引入其中时出现了问题。

我希望动态生成查询语句,因为我的参数数量是可变的,并且希望尽可能减少对collection.find的调用次数。

为此,我正在使用如下简单的查询语句:

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

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

然而,当我尝试使用$or时,整个过程都会崩溃。
我已尝试以下每种方法均无法成功:
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都需要用引号括起来(老实说我不确定这是否是问题的原因...),否则查询将失败。

有没有什么方法可以解决这个问题?


它是抛出错误还是只是没有返回任何数据? - c0deNinja
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)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接