Обновить поле, используя существующее значение - PullRequest
0 голосов
/ 16 сентября 2018

Работа со следующей версией MongoDB (package.json content):

"mongodb": "^3.0.2"

И у меня есть следующий код:

const addValue = 10;

await db.db('dbname').collection('collname').updateOne({
        bar: bar
    }, {
        $set: {
            foo: foo
        }
     }
);

Я хочу установить для переменной foo значениестарое значение foo + переменная addValue.Примерно так в псевдокоде:

$set: {
    foo: foo + addValue 
}

При реализации этого кода я получаю следующее: referenceError:

 C:\Users\wille\Desktop\Projects\nv\server\XXX_playground.js:28
             foo: foo  + addValue
                         ^

 **ReferenceError**: foo is not defined
     at Timeout.test [as _onTimeout] (C:\Users\wille\Desktop\Projects\nv\server\XXX_playground.js:28:26)
     at ontimeout (timers.js:424:11)
     at tryOnTimeout (timers.js:288:5)
     at listOnTimeout (timers.js:251:5)
     at Timer.processTimers (timers.js:211:10) PS C:\Users\wille\Desktop\Projects\nv\server>

Я просто сначала мог бы запросить переменную foo с помощью findOneсохраните его в переменной, а затем используйте его в updateOne.Однако это приведет к двум запросам и будет немного неоптимальным.

Вопрос:

Есть ли способ сделать это в одном запросе?

1 Ответ

0 голосов
/ 16 сентября 2018

Оператор $inc Mongoose принимает значения приращения в качестве значений переданного ему объекта:

const addValue = 10;

await db.db('dbname').collection('collname').updateOne({
    bar: bar
}, {
    $inc: {
        foo: addValue // the value you want to increment by
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...