Как я могу выполнить полнотекстовый поиск в Mongoose с несколькими параметрами, но со ссылкой И?

#javascript #node.js #mongodb #typescript #mongoose

#javascript #node.js #mongodb #typescript #mongoose

Вопрос:

У меня проблема в том, что я могу выполнить полнотекстовый поиск по одному слову плавно, но как я могу выполнить поиск по нескольким параметрам или, скорее, ввести их?

моя функция:

     export const searching = (req: Request, res: Response) => {
      Company.find({ $or: [{ $text: { $search: req.query.search as string } }] }).exec((err, docs) => {
        console.log(req.query.search?.toString()!)
        if (docs) {
          res.status(200).json(docs)
        } else {
          console.log(err)
        }
      })
}
  

Я хочу объединить два параметра с AND и, таким образом, выполнить поиск данных, содержащих именно эти два параметра и ничего больше.

Как я могу это реализовать?

Ответ №1:

Для этого вы можете использовать функцию aggregate.

 Company.aggregate([
  {
    $match : {$fieldName : 1st phrase here}
  },
  {
    $match : {$fieldName : 2nd phrase here} 
  }
])
  

Объяснение кода :
На первом этапе mongodb найдет все документы с первой введенной вами фразой. Это в основном то, что делает ваш текущий запрос. Теперь результат этого этапа будет входом следующего этапа, где мы сопоставляем 2-ю фразу.
Следовательно, мы фильтруем документы поэтапно. Сначала отфильтруйте документы, содержащие 1-ю фразу, затем найдите документы, содержащие 2-ю фразу из предыдущего результата.