Nodejs Mongoose查找值连接

时间:2014-09-10 22:20:34

标签: node.js mongodb mongodb-query

这是我的第一篇文章,需要知道我是如何解决我的问题的

我有这段代码

var searchParams = '{}';
if(typeof nt !== 'undefined') {searchParams = {ticket: {$regex: nt}};}
if(typeof tp !== 'undefined') {searchParams = searchParams + {typet:  {$regex: tp}};}
if(typeof st !== 'undefined') {searchParams = searchParams + {status: {$regex: st}};}

但是,当我尝试将“SearchParams”放入我的查找中时,这是行不通的 这是我的查找中的代码

    db.iModel.find(
        searchParams,
{status:1,datestart:1,typet:1},
        {skip:start,limit:limit}).sort(sortParams).execFind(function (err, IncidentSchema) {

我认为可能问题在于“searchParams + {typet:{$ regex:tp}}”这不是工作方式。这是因为我尝试只有一个参数正在工作!但我们尝试更多参数不起作用

带有一个参数的控制台日志的

是简单的字符串,但有更多参数返回此[object Object] [object Object]

对不起我的英语我是西班牙语

由于

1 个答案:

答案 0 :(得分:0)

对MongoDB的查询表示为对象而不是字符串。所以你不要“连接”#34;而是“#34; build"像在本机代码中一样对象:

var searchParams = {};
if(typeof nt !== 'undefined') { searchParams["ticket"] = { $regex: nt } }
if(typeof tp !== 'undefined') { searchParams["typet"] = { $regex: tp } }
if(typeof st !== 'undefined') { searchParams["status"] = { $regex: st } }

console.log( JSON.stringify( searchParams, undefined, 2 ) );

只需将其记录下来,就可以看到生成的查询对象的样子。

另请注意,MongoDB查询参数默认为"和"操作,所以如果你真的想要一个$or条件,其中任何一个条件都可以为真,那么你通过推送到数组来构建这个方式:

var searchParams = { "$or": [] };
if(typeof nt !== 'undefined') { seachParams["$or"].push({ "ticket": { $regex: nt }}); }
if(typeof tp !== 'undefined') { searchParams["$or"].push({ "typet": { $regex: tp }}); }
if(typeof st !== 'undefined') { searchParams["$or"].push({ "status": { $regex: st }}); }

console.log( JSON.stringify( searchParams, undefined, 2 ) );