首页 > 解决方案 > 如果我创建一个查询字符串并传递给 find() 它不会给出错误而是返回空值

问题描述

我按照建议尝试了这段代码;但它没有将 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 先生的回复;你能建议点什么吗?谢谢阿努拉格

标签: node.jsmongoose

解决方案


好的,我已经看到两个问题,第一个,你给 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.}
});

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


推荐阅读