#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-ю фразу из предыдущего результата.