Skip to main content

Що робить $expr? Коли потрібен $expr замість стандартних фільтрів?

$expr дозволяє використовувати вирази й операції між полями всередині одного документа під час фільтрації. У звичайних фільтрах так зробити не можна - вони порівнюють поле лише з конкретним значенням, а $expr може порівнювати поле з полем, виконувати операції $gt, $add, $subtract тощо.

Коли потрібен $expr (простою мовою)

Використовується, коли умову не можна записати через звичайний фільтр. Наприклад:

  • потрібно порівняти одне поле з іншим
  • потрібно застосувати обчислення прямо у фільтрі (додавання, віднімання тощо)
  • потрібно використати агрегатні оператори в запиті

Приклад: порівняння поля з полем

Завдання: знайти документи, де spent > limit (звичайним фільтром так не можна - там порівняння лише з конкретним значенням)

js
db.users.find({ $expr: { $gt: ["$spent", "$limit"] } })

Приклад: порівняння з обчисленням

Знайти товари, у яких ціна більша за знижену версію (price * 0.9):

js
db.products.find({ $expr: { $gt: ["$price", { $multiply: ["$discountPrice", 1.1] }] } })

Підсумок для junior:

ФільтрКоли використовувати
Звичайний { field: value }прості порівняння з константами
$exprпорівняння поле з полем чи складні вирази

Висновок: $expr потрібен, коли логіка фільтрації залежить від обчислень чи порівнянь між полями одного документа.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.