sldo_ru
@sldo_ru
Frontend Dev. in Birppl

Как использовать оператор $and для update mongoDB?

Есть условие для добавления данных, значение должно быть больше, чем существующее, тогда все остальные поля изменяются. Как сделать это? В моем случае все поля все равно изменяются, и только поле price меняется в зависимости от $max. Было бы хорошо, чтобы был оператор $and для Mongo Update, но не смог найти

User.updateOne(
                                {id: 1},
                                {
                                    $set: { 'stats.one': r.one, 'stats.openDate': new Date() },
                                    $max: { 'stats.price': r.price }
                                },
                                { "upsert": true },
                                (err, data) => console.log(data)
                                )
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
sldo_ru
@sldo_ru Автор вопроса
Frontend Dev. in Birppl
В данном случае достаточно использовать синтаксис агрегации для обновления, таким образом можно использовать условия для добавления.

User.updateOne(
                                {id: 1},
                                [{
                                    $set: {
                                        'stats.price': {
                                            $cond: {
                                                if: {$gt: [r.price, '$stats.price']},
                                                then: r.price,
                                                else: '$stats.price'
                                            }
                                        },
                                        'stats.one': {
                                            $cond: {
                                                if: {$gt: [r.price, '$stats.price']},
                                                then: r.one,
                                                else: '$stats.one'
                                            }
                                        },
                                        'stats.openDate': {
                                            $cond: {
                                                if: {$gt: [r.price, '$stats.price']},
                                                then: new Date(),
                                                else: '$stats.openDate'
                                            }
                                        }
                                    }
                                }], (err, data) => console.log(data)
                                )
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы