Как лучше всего читать и обновлять в mongodb? - PullRequest
2 голосов
/ 02 июля 2019

Мне нужно прочитать документ из коллекции, прочитать его значение, а затем, если значение <40, мне нужно увеличить значение. </p>

Вот мое текущее решение

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 голосов
/ 05 июля 2019

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>
       }
    )
0 голосов
/ 02 июля 2019

Вы можете закодировать это условие в запросе и выполнить простое 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
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...