#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();