Я использую узел js, mongoose, express и mongodb.
Я создал простую форму, в которой вы вводите полное имя, и он ищет в базе данных и возвращает другие данные.
Можно ли искать только несколько слов из всего имени? например, если пользователь хочет выполнить поиск "abc xyz", пользователь может сделать то же самое, что и "abc" или "xyz",
это мой первоначальный маршрут:
app.get("/",function(req,res){
var name = req.query.name;
details.findOne({fullname:name},function(err,foundAsked){
if(err){console.log("ERROR!!!");}
else{res.render("Details.ejs",{foundAsked:foundAsked,name:name}); }
});
});
Можно ли это сделать? Если да, то как я могу это реализовать?
Вы можете использовать регулярное выражение для частичного совпадения в определенных полях
const query = {
fullname: {
$regex: req.query.name,
$options: 'i'
}
};
details.find(query, function(err, foundAsked){
...
})
Где i
в запросе делает регистр нечувствительным к регистру.
В случае использования частичного поиска, я не рекомендовал бы использовать findOne
, поскольку это может ввести в заблуждение пользователю возвращать только один результат, если он/она типа скажем A
Да, для этого можно использовать регулярные выражения:
details.findOne({ fullname : /.*(?:abc|xyz).*/gi }, .....