$cond використовується коли необхідно виконати певний блок коду якщо виконується певна умова.
Умова виконується якщо сама умова if дорівнює true, тоді виконується блок then в іншому випадку виконується блок else бо умова дорівнює false.
Вираз $cond має один із двох синтаксисів які очікуюсь три аргументи if-then-else:
{ $cond: { if: <boolean-expression>, then: <true-case>, else: <false-case> } }
Або
{ $cond: [ <boolean-expression>, <true-case>, <false-case> ] }
Приклад
Колекція products містить в собі наступні документи:
{
_id: "62cbbabab8fa90001118e138",
"deleted": false,
"name": "keyboard",
"price": 2500
},
{
_id: "62cbbabab8fa90001118e139",
"deleted": false,
"name": "monitor",
"price": 3000
},
{
_id: "62cbbabab8fa90001118e13a",
"deleted": false,
"name": "mouse",
"price": 700
}
Операція агрегації використовує $cound для того щоб зробити знижку на товар. Якщо ціна товару більша за 2000, то у полі newPrice буде ціна із знижкою 10%. Якщо ціна менша за 2000 тоді вона залишається без змін.
msg.collection = "products";
msg.payload = [
{
$match: { deleted: false }
},
{
$project: {
"name": 1,
"price": 1,
newPrice: {
$cond: {
if: { $gt: ["$price", 2000] },
then: {
$subtract: [
"$price",
{ $multiply: ["$price", .10] }
]
},
else: "$price"
}
}
}
}
];
return msg;
Крок 1. Перший етап конвеєра фільтрує продукти які не видалені за допомогою операції $match
Крок 2. Другий етап конвеєра операція $project яка витягує певні поля з колекції
Крок 3. Нове поле newPrice містить в собі умову $cond.
Якщо ціна товару більша за 2000 if: { $gt: ["$price", 2000] }
то виконується умова
then: {$subtract: ["$price", { $multiply: ["$price", .10]}]}
у противному випадку else: "$price"
Результат запиту
Використані операції
- $match
- $project
- $gt
- $subtract
- $multiply
Top comments (0)