在mongodb中读取然后更新的最佳方法是什么?

时间:2019-07-02 18:09:19

标签: node.js mongodb mongoose mongodb-query

我需要从集合中读取文档,读取其值,然后如果值是<40,则需要增加值。

这是我当前的解决方案

let promise = db.collection('transactions').findOne(
        { _id: 'myid' }
    ).then(doc => {
        if (doc.count < 40) {
            ///update & increment doc.count
        }
        else {
            //do not increment
        }
    });

findOneAndModify允许在修改之前阅读文档吗?

2 个答案:

答案 0 :(得分:0)

您可以在查询中对此条件进行编码,然后执行简单的update

db.collection('transactions').updateOne(
    {_id: 'id', count: {$lt: 40}},
    {$inc: {count: 1}}
)

如果需要获取文档(在修改之前或之后),只需使用findAndModify

db.collection('transactions').findAndModify({
    query: {_id: 'id', count: {$lt: 40}},
    update: {$inc: {count: 1}},
    new: trueIfYouWantToGetTheModifiedVersion
})

答案 1 :(得分:0)

http://www.mongoing.com/docs/reference/method/db.collection.findOneAndUpdate.html

db.collection.findOneAndUpdate(
       <filter>,
       <update>,
       {
         projection: <document>,
         sort: <document>,
         maxTimeMS: <number>,
         upsert: <boolean>,
         returnNewDocument: <boolean>,
         collation: <document>
       }
    )