UBOS Community

vova
vova

Posted on

Conditional | node-red + mongoDB

$cond використовується коли необхідно виконати певний блок коду якщо виконується певна умова.
Умова виконується якщо сама умова if дорівнює true, тоді виконується блок then в іншому випадку виконується блок else бо умова дорівнює false.

Вираз $cond має один із двох синтаксисів які очікуюсь три аргументи if-then-else:

{ $cond: { if: <boolean-expression>, then: <true-case>, else: <false-case> } }
Enter fullscreen mode Exit fullscreen mode

Або

{ $cond: [ <boolean-expression>, <true-case>, <false-case> ] }
Enter fullscreen mode Exit fullscreen mode

Приклад

Колекція 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
    }
Enter fullscreen mode Exit fullscreen mode

Операція агрегації використовує $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;
Enter fullscreen mode Exit fullscreen mode

Крок 1. Перший етап конвеєра фільтрує продукти які не видалені за допомогою операції $match
Крок 2. Другий етап конвеєра операція $project яка витягує певні поля з колекції
Крок 3. Нове поле newPrice містить в собі умову $cond.
Якщо ціна товару більша за 2000 if: { $gt: ["$price", 2000] }
то виконується умова
then: {$subtract: ["$price", { $multiply: ["$price", .10]}]}
у противному випадку else: "$price"

Результат запиту

Image description

Використані операції

  • $match
  • $project
  • $gt
  • $subtract
  • $multiply

Discussion (0)