Що робить $expr? Коли потрібен $expr замість стандартних фільтрів?
$expr дозволяє використовувати вирази й операції між полями всередині одного документа під час фільтрації. У звичайних фільтрах так зробити не можна - вони порівнюють поле лише з конкретним значенням, а $expr може порівнювати поле з полем, виконувати операції $gt, $add, $subtract тощо.
Коли потрібен $expr (простою мовою)
Використовується, коли умову не можна записати через звичайний фільтр. Наприклад:
- потрібно порівняти одне поле з іншим
- потрібно застосувати обчислення прямо у фільтрі (додавання, віднімання тощо)
- потрібно використати агрегатні оператори в запиті
Приклад: порівняння поля з полем
Завдання: знайти документи, де spent > limit
(звичайним фільтром так не можна - там порівняння лише з конкретним значенням)
db.users.find({
$expr: { $gt: ["$spent", "$limit"] }
})Приклад: порівняння з обчисленням
Знайти товари, у яких ціна більша за знижену версію (price * 0.9):
db.products.find({
$expr: { $gt: ["$price", { $multiply: ["$discountPrice", 1.1] }] }
})Підсумок для junior:
| Фільтр | Коли використовувати |
|---|---|
Звичайний { field: value } | прості порівняння з константами |
$expr | порівняння поле з полем чи складні вирази |
Висновок: $expr потрібен, коли логіка фільтрації залежить від обчислень чи порівнянь між полями одного документа.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.