使用现有值更新字段

时间:2018-09-16 16:22:49

标签: javascript node.js mongodb mongodb-query

使用以下MongoDB版本(package.json内容):

"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>

我只是首先可以使用findOne查询foo变量,然后将其存储在变量中,然后在updateOne中使用它。但是,这将导致2个查询,并且似乎不是最佳选择。

问题:

是否可以在一个查询中做到这一点?

1 个答案:

答案 0 :(得分:1)

猫鼬的$inc运算符接受增量值作为传递给它的对象的值:

const addValue = 10;

await db.db('dbname').collection('collname').updateOne({
    bar: bar
}, {
    $inc: {
        foo: addValue // the value you want to increment by
    }
});