Как обновить документ, если он существует, и вставить его, если он не существует в mongodb?

#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 решает мою проблему.