Как сопоставить любую букву в свойстве при запросе?
Я написал функциональность для MongoDB, которая позволяет мне искать по имени или по фамилии, но она работает, только если введено полное имя. Я бы хотел, чтобы это работало, если только часть имени совпадает.
Например, если мой поисковый запрос by
тогда я бы хотел получить следующие результаты:
{"firstname": Tony, "lastname": Bobby} , {"firstname": Bonby, "lastname": Johny}
Это код, который я написал:
if (req.query.searchText === undefined || req.query.searchText === "") {
var queryData = { $and:[ {location_id: req.params.location_id}, {role:[constants.ROLES.VET]}, {is_active:true }] }
} else {
var queryData =
{
$and: [
{ $or: [{ first_name: req.query.searchText }, { last_name: req.query.searchText }] },
{ $and:[ {location_id: req.params.location_id}, {role:[constants.ROLES.VET]}, {is_active:true}] }
]
}
}
2 ответа
Решение
var searchText = req.query.searchText.'+';
var $queryData =
{
$and: [
{ $or: [{ first_name: { $regex: searchText } }, { last_name: {$regex: searchText }}] },
{ $and:[ {location_id: req.params.location_id}, {role:[constants.ROLES.VET]}, {is_active:true}] }
]
}
Пример 'b+' найти строку содержит один или несколько b в строке, поэтому я добавил '+' с вашим searchText. Это работает, как и ожидалось, если строка поиска содержит один символ.
Вы можете попробовать $ где в MongoDB
,
Это не самый простой способ поиска по тексту, но гибкий.