Обновление Mongoose с использованием уже измененного документа и основанных на нем критериев - PullRequest
0 голосов
/ 21 мая 2018

Я реализую систему upvote (и downvote) для пользователей, использующих node.js и mongoose mongodb, это логика:

    if (req.body.vote === 'up') {
        Posts.bulkWrite([
            {
                updateOne: {
                    filter: {
                        "_id": req.params.postId,
                        "votes.up": req.user._id 
                    },
                    update: {
                        $pull: { "votes.up": req.user._id },
                        $inc: { "upvoteCount": -1 }
                    }
                }
            },
            {
                updateOne: {
                    filter: {
                        "_id": req.params.postId,
                        "votes.up": { $ne: req.user._id },
                        "votes.down": req.user._id
                    },
                    update: {
                        $push: { "votes.up": req.user._id },
                        $inc: { "upvoteCount": 1, "downvoteCount": -1 },
                        $pull: { "votes.down": req.user._id }
                    }
                }
            },
            {
                updateOne: {
                    filter: {
                        "_id": req.params.postId,
                        "votes.up": { $ne: req.user._id }
                    },
                    update: {
                        $push: { "votes.up": req.user._id },
                        $inc: { "upvoteCount": 1 }
                    }
                }
            }
        ])
   }

очевидная проблема заключается в том, что в этом случае, если пользовательupvotes, это работает, но затем при попытке удалить upvote, снова нажав кнопку upvote, оно сначала удаляется первым обновлением, но затем добавляется снова, потому что третье обновление видит уже измененный документ, то есть обновляет его дважды,Я хотел бы ограничить это только одной модификацией.Я думал об использовании счетчика, но куда мне положить if ..?С этой логикой может возникнуть большая архитектурная проблема.

Я новичок в этом, любой совет / решение приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...