Как сопоставить любую букву в свойстве при запросе?

Я написал функциональность для 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,

Это не самый простой способ поиска по тексту, но гибкий.

Другие вопросы по тегам