node.js - 如果我创建一个查询字符串并传递给 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 先生的回复;你能建议点什么吗?谢谢阿努拉格
解决方案
好的,我已经看到两个问题,第一个,你给 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/,希望对您有所帮助。
推荐阅读
- reactjs - 使用打字稿中的反应组件按键动态访问对象
- node.js - 如何在express中的html表中发布数据
- c# - EF Core 插入具有现有子项的新实体
- sqlite - Sqlite FTS4:更改现有表的标记器
- javascript - 如何在本机反应中在获取 POST 请求中抛出 Catch
- visual-studio-code - 切换终端快捷方式在 vscode 中不起作用
- java - JIT 是否将部门优化为一个?
- php - CKFinder 上传图像给出错误“上传完成但有错误”
- config - 赛普拉斯的 modifyObstructiveCode 仅在全球范围内有效?
- python - 如何从 flask-SQLAlchemy 中的数据库中删除记录?