Я довольно новичок в mongodb, в прошлом я работал с mysql для запросов к базе данных.
Теперь у меня есть 2 коллекции mongo:
- companies
+--------------+--------------+
| id | name |
+--------------+--------------+
| 1 | good name |
+--------------+--------------+
| 2 | bad name |
+--------------+--------------+
позиций
+--------------+---------------+-------------------+
| id | companyId | name |
+--------------+---------------+-------------------+
| 1 | 1 | bad position |
+--------------+---------------+-------------------+
| 2 | 2 | good position |
+--------------+---------------+-------------------+
Теперь мне нужно разрешить поиск позиций по нечеткому совпадению с названием, компанией или названием должности.Например, если я ищу по имени «хорошо», результат должен быть 2 позиции.Поскольку для позиции 1 это коррелированное название компании содержит «хорошо», а для позиции 2 ее собственное имя содержит «хорошо».
Так, как мне организовать aggregation pipelines
для достижения этого?
Я пробовал следующее, но оно не работает:
const lookup = {
from: "companies",
localField: "companyId",
foreignField: "_id",
as: "companies"
};
const match = {
$or: [
{
name: { $regex: companyOrPositionName }
},
{
"companies": { name: { $regex: companyOrPositionName } }
}
]
};
return await position.aggregate([{ $lookup: lookup }, { $match: match }]);
Кто-нибудь может помочь?Заранее спасибо!