这是我的第一篇文章,需要知道我是如何解决我的问题的
我有这段代码
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]
对不起我的英语我是西班牙语
由于
答案 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 ) );