Оператор инкремента Мангуста, увеличивающий количество на два

#node.js #mongodb #mongoose

#node.js #mongodb #мангуст

Вопрос:

В настоящее время я пытаюсь увеличить количество на единицу с помощью этой функции :

 Goal.updateOne({_id: goalID, 'participants.userID': uid}, {$inc: {'participants.$.streak': 1}}, {}, function (err) {
    if (err) {
        return socket.error(err)
    } else {
        return
    }
}).catch(function(error) {
    console.log(error);
});;
  

По сути, он находит цель, в которой участник с ребенком, а затем увеличивает их серию на 1. Раздел участников схемы целей выглядит следующим образом :

  participants: [{
        userID:  {
            type: String,
            required: true
        },
        userName: {
            type: String,
            maxlength: 100,
            required : true
        },
        streak: {
            type: Number,
            required: true,
            default: 0
        } 
    }]
  

Однако, когда я пытаюсь запустить эту функцию для пользователя, у которого полоса равна 0 или у которого нет поля полосы, счетчик полос устанавливается на 2 в базе данных. Функция вызывается только один раз, и я пытался поиграть с $ upsert и $new безрезультатно. Кто-нибудь имеет представление о том, как это могло произойти?

Ответ №1:

По-видимому, проблема заключалась в обратном вызове, в результате которого операция инкремента вызывалась дважды.

Решение :

 await Goal.updateOne({_id: goalID, 'participants.userID': uid}, {$inc: {'participants.$.streak': 1}}, {}).exec();