#node.js #mongodb #mongoose #mongodb-query
Вопрос:
Этот вопрос отличается от других подобных вопросов, потому что опция { upsert: true } не дает желаемого результата. Я хочу обновить/вставить приведенный ниже документ:
{ _id: { playerId: '1407081', tournamentId: '197831', matchId: '1602732' }, playerName: 'abcd', points: -5 }
После выполнения приведенного ниже кода,
await Points.findOneAndUpdate( { "_id": playerStatsObjForDB._id }, { playerStatsObjForDB }, { upsert: true } ); //where playerStasObjForDB is same as object mentioned in top.
если документ не существует, он вставляет следующий документ:
{ "_id": { "playerId":"1407081", "tournamentId":"197831", "matchId":"1602732" }, "__v":0, }
Я использую мангуста, но любая помощь будет очень признательна.
Ответ №1:
Ну, MongoDB upsert работает следующим образом:
db.products.updateMany( { _id: 6 }, { $set: {price: 999} }, { upsert: true} )
Таким образом, в основном первый параметр-это сам запрос, как и вы, но вторым параметром должны быть обновления, которые вы хотите изменить, и вы должны использовать операторы MongoDB, такие как $set. Вместо этого кажется, что вы встроили в него весь объект без изменений.
Комментарии:
1. Использование оператора $set решает мою проблему.