findOneAndUpdate вызывает проблему дублирования - PullRequest
0 голосов
/ 11 марта 2019

У меня проблема с findOneAndUpdate в mongoose. Дело в том, что я обновляю документ, найдя его. Запрос выглядит следующим образом:

UserModel.findOneAndUpdate({
individualId: 'some id'
}, {
$push: {
supporterOf: 'some string'
}
})

'supporterOf' - это ссылка на UserModel, а его тип - 'ObjectId'.

Проблема, с которой я здесь сталкиваюсь, заключается в том, что «некоторая строка» дважды помещается под «supporterOf» в документе.

Может кто-нибудь сказать мне, как вставить элемент массива в документ?

1 Ответ

1 голос
/ 12 марта 2019

Я недавно столкнулся с той же проблемой. Однако мне удалось преодолеть эту проблему с помощью некоторых других логик (подробности приведены ниже), но я не мог понять причину, по которой findOneAndUpdate вставляет дубликаты записей в mongodb.

Вы можете преодолеть эту проблему, следуя логике.

Используйте findOne или findById вместо findOneAndUpdate , чтобы найти документ в вашей коллекции, а затем вручную обновить документ и запустить save () .

Вы можете иметь лучшую идею с этим фрагментом кода

return new Promise(function (resolve, reject) {
    Model.findOne({
            someCondition...
        }, function (err, item) {
            if (err) {
                reject(err);
            } else {
                item.someArray.push({
                    someKeyValue...
                });
                item.save().then((result) => {
                    resolve(result)
                }).catch((err) => {
                    reject(err)
                });
            }
        }).catch((err) => {
            reject(err)
        });
   });

Это не будет вставлять дубликаты. Однако, если вы узнали причину дублирования, обязательно обновите эту ветку.

...