代码之家  ›  专栏  ›  技术社区  ›  Willem van der Veen

使用现有值更新字段

  •  1
  • Willem van der Veen  · 技术社区  · 6 年前

    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 updateOne . 但是,这将导致两个查询,似乎有点不太理想。

    问题:

    有没有一种方法可以在一个查询中实现这一点?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Luca Kiebel    6 年前

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

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