Пн goose замена findOneAndReplace do c пусто - PullRequest
1 голос
/ 25 мая 2020

Я хочу заменить документ в одной из моих моделей (конфигураций), и для этого я использую метод findOneAndReplace . Однако mon goose заменяет документ пустым.

Я вызываю метод как:

let updateData = { _id: '5ecba01dbac0c68120535f40', data: 'newData' };

Configuration.findOneAndReplace({ uuid : req.params.uid }, updateData, (err, conf) => {
    if ( err ) {
        sendErrorResponse ( res, err );
    } else {
        res.json ( {
            status : 1,
            data   : conf
        } );
    }
} );

В журналах я вижу это:

configurations.findOneAndReplace({ uuid: 'default' }, {}, { _id: '5ecba01dbac0c68120535f40', data: 'newData' }, projection: {}})

Согласно документации, второй параметр должен быть документом замены, но mon goose передает документ замены как 3-й параметр, а второй параметр пуст. Я думаю, что это причина того, что он устанавливает его пустым в db.

Теперь вместо этого, если я использую findOneAndUpdate , он работает полностью нормально. Я получаю в журналах следующее:

configurations.findOneAndUpdate({ uuid: 'default' }, { '$set': { _id: '5ecba01dbac0c68120535f40', data: 'newData' }}, { upsert: false, projection: {}, returnOriginal: true })

Но я хочу заменить документ, а не обновлять его. Есть ли что-то, чего мне не хватает, или это, вероятно, ошибка в понедельник goose?

1 Ответ

1 голос
/ 25 мая 2020

Недавно у нас была аналогичная проблема - установка параметров для пустого объекта и включение useFindAndModify в настройках подключения решило проблему для нас:

// connection-setup

mongoose.connect('mongodb://...', { useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify:true });

// findOneAndReplace call

Configuration.findOneAndReplace({ uuid : req.params.uid }, updateData, {}, (err, conf) => {
        ...
});

Также есть этот github проблема , которая может помочь.

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