如果存在,如何更新文档,如果在 mongodb 中不存在,如何将其插入?

Posted

技术标签:

【中文标题】如果存在,如何更新文档,如果在 mongodb 中不存在,如何将其插入?【英文标题】:How to update document if it exist and insert it if it doesn't exist in mongodb? 【发布时间】:2021-12-20 01:06:33 【问题描述】:

这个问题与其他类似问题不同,因为 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
)

所以基本上第一个参数是查询本身,和你做的一样,但第二个应该是你想要修改的更新,你应该使用像 $set 这样的 MongoDB 操作符。 相反,您似乎将整个对象嵌入其中而没有修改。

【讨论】:

使用 $set 运算符解决了我的问题。

以上是关于如果存在,如何更新文档,如果在 mongodb 中不存在,如何将其插入?的主要内容,如果未能解决你的问题,请参考以下文章

更新 mongodb 文档,如果该文档存在,则创建

MongoDB更新数组元素(带有键的文档)如果存在,否则推送

如果它不存在,如何在 MongoDB 中添加新文档?

MongoDB-更新多个文档解决方案-更新文档计数器或在不存在的情况下插入

MongoDB原子“findOrCreate”:findOne,如果不存在则插入,但不更新

用$ set和$ upsert更新mongodb