{ $match: { <query> } }
Це основний синтаксис для $match. Його можна використовувати кілька разів. І практично кожен етап можна використовувати після нього, за деякими винятками, які ми розглянемо пізніше.
Варто думати про $match як про фільтр, а не як пошук.
Ми налаштовуємо фільтри на етапі $match, і в міру надходження документів лише ті, які відповідають критеріям, передаються далі в конвеєр.
На зображенні для прикладу $match пропускає лише кола та зірки.
Ми можемо виконувати matches на основі порівняння, логіки, масивів і багато іншого. Єдине обмеження полягає в тому, що ми не можемо використовувати оператор $where. І якщо ми хочемо використовувати оператор $text, етап $match має бути першим етапом конвеєра. Якщо $match є першим етапом, він може використовувати переваги індексів, які збільшують швидкість наших запитів. Знову ж таки, $match має з’явитися на початку наших конвеєрів.
Приклади
Створим флов який повертає інформацію про користувача за його ідентифікатором.
Флов складається з декількох вузлів:
- http in
- function
- mongodb in (тут буде посилання на статтю про підключення mongodb)
- http response
- debug
Вузол http in містить у собі властивості:
- Method
- URL
- Name У URL ми передали змінну шляху /:id куди ми будем передавати ідентифікатор користувача. У вузлі function формуєм запит до бази даних.
msg.collection = "users";
- це назва колекції
У msg.payload записуєм поетапно конвеєри.
Першим етапом є фільтрація колекції по _id.
Для пошуку за індексом потрібно використати модуль ObjectId
Для того щоб його добавити потрібно перейти в налаштування вузла function та натиснути кнопку add і вибрати відповідний модуль.
Передаєм у ObjectId ідентифікатор користувача.
{
$match: {
_id: ObjectId(msg.req.params.id)
}
}
У msg.req.params зберігаються всі змінні які ми передаєм через параметри шляху. Щоб побачити об'єкт req потрібно з'єднати два вузли http in та debug.
Наступним етапом конвеєра вказуєм $project який повертає певні поля.
{
$project: {
"firstName": 1,
"email": 1,
"city": 1
}
}
Якщо добавити вузол debug до function то можна побачити всі етапи конвеєру з даними які прийшли з вузла http in.
Далі потрібно з'єднати вузол function до mongodb in для того щоб відправити запит у базу даних. Потім добавити вузол http response щоб отримати відповідь від бази.
Давайте зробим запит через Postman передавши /:id та отримаєм відповідь.
Створим флов який повертає кількість продуктів які не видалені та підходять під певний діапазон ціни.
msg.collection = "products";
msg.payload = [
{
$match: {
deleted: false,
price: { $gt: 2000, $lt: 2500 }
}
},
{ $group: { _id: null, count: { $sum: 1 } } }
]
return msg;
Використані операції
- $match
- $project
- $gt
- $lt
- $sum
- $group
Top comments (0)