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

Dynamic mongodb query generation with Node.js driver

本文关键字:动态 mongodb 查询 程序生成 Node js 使用      更新时间:2023-09-26

我正在使用MongoDB的Node.js驱动程序,并且在调用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>';

阿拉伯数字。

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

3.

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

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

有什么办法可以做到这一点吗?

以下是您可以做到这一点的方法(可能有多种方法):

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)