我想根据名字和姓氏查找数据库中所有出现的事件(邀请用户在搜索栏中输入他想要的内容),并且我应该返回所有具有匹配的名字或姓氏的人该查询。
我已经有一个解决方案,但我认为会有更好的解决方案。 这是我的:
maladeModel.find ({},{nom: 1, prenom: 1, dateNaissance :1, adresse :1, photoIdentite :1},(err, malades) => {
if (err) {
res.status(500).json ({
type: "Err" ,
message : "Server not responding"
});
}
return malades;
}).then (malades=>
{
malades = malades.filter(malade=> {
return malade.nom.toUpperCase().includes(req.body.key.toUpperCase())
||
malade.prenom.toUpperCase().includes(req.body.key.toUpperCase())
});
res.status(200).json ({type :"Info", message: "Le malade est trouve" , malades});
}
);
答案 0 :(得分:0)
始终使用此mongodb聚合内置过滤器是最佳选择。
maladeModel.aggregate([
{
$project:{
nom: { $toLower: "$nom" },
prenom: { $toLower: "$prenom" },
dateNaissance :1, adresse :1, photoIdentite :1
}
},
{
$match:{
$or:[
{nom: req.body.key.toLowerCase()},
{prenom: req.body.key.toLowerCase()}
]
}
}
]).exec(function(err, malades) {
res.status(200).json ({type :"Info", message: "Le malade est trouve" , malades});
});
答案 1 :(得分:0)
为简单起见,您可以做
maladeModel.find({
$or:[
{nom: req.body.key.toLowerCase()},
{prenom: req.body.key.toLowerCase()}
]
}, {dateNaissance :1, adresse :1, photoIdentite :1}).then(malades =>{
res.status(200).json({type :"Info", message: "Le malade est trouve" , malades});
}).catch(err => res.status(500).json({message: err.message}))
这将为您提供数据库中所有匹配的文档,但是我认为indexing是最快的。您可以检查