如果我创建一个查询字符串并传递给find(),它不会给出错误,而是返回空值

时间:2018-08-18 10:28:20

标签: node.js mongoose

我按照建议尝试了此代码;但是它没有将fieldlist作为变量
    searchstr [k] = {fieldlist:fields [l]};     我必须创建动态搜索字符串,因为我必须搜索更多的多个字段组合。

var searchstr={}; 
            // start
          var fieldlist=[ "city", "department"];
            // var fieldlist=["treatment","city","name","facility","department","accreditation"];
            var k=0;
            fieldlist.forEach(function(fieldlist)
            {
                searchstr[k]="";                     
                for(var l= 0;l<fields.length;l++)
                {
                   searchstr[k]= {fieldlist:fields[l]};
                }
             console.log(searchstr[k]);   
            k++;
            });
    console.log(searchstr); 
            // end
          Hospitals.find(
              { $or: [{ searchstr: {city:1}} ]
              } 
               ).sort({'city': 1}).exec(function (err, hospitals) {
                if(err){
                       req.flash("error","Couldn't find hospital for "+strUser);
                       res.redirect("/");
                    console.log(err);
                }else{
                ..some code..
                }

显示为的searchstr  {'0':{fieldlist:'CARDIOLOGY'},'1':{fieldlist:'CARDIOLOGY'}
 给出空结果;  感谢先生。 Vito Mario 进行回复;你能建议点什么吗?  谢谢  阿努拉格

1 个答案:

答案 0 :(得分:0)

好吧,我已经看到了两个问题,第一个,您给searchstr一个字符串值,我知道您是故意这样做的,但是您不会得到想要的结果,因为mongo无法通过字符串查询而是一个对象,因此您应该改为:

searchstr[k]= {fieldlist[k]:fields[l]}; 

因此,您必须将searchstr声明为一个对象。 然后另一件事是您需要按以下方式进行查询:

Hospitals.find( { $or: [{ searchstr: {city:1}, {department: 'foo'}} ]} ).sort({'city': 1}).exec(function (err, hospitals) {
if(err){.some code.} 
else{.some code.}
});

这是一个示例,您可以在https://docs.mongodb.com/manual/reference/operator/query/or/处访问mongodb文档以获取更多信息,希望对您有所帮助。