Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить $expr? Коли потрібен $expr замість стандартних фільтрів?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)`$expr` дозволяє використовувати вирази й операції між полями всередині одного документа під час фільтрації, наприклад порівняти `spent` з `limit`; звичайні фільтри можуть порівнювати поле лише з конкретним значенням, а `$expr` уміє порівнювати поле з полем і виконувати операції на кшталт `$add`, `$subtract`. **Ключове:** `$expr` потрібен, коли логіка фільтрації залежить від обчислень чи порівнянь між полями одного документа, а не константи.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення`$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` потрібен, коли логіка фільтрації залежить від обчислень чи порівнянь між полями одного документа.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.