mongo数据库之“upsert”(一种特殊的更新)

upsert:

   是一种特殊的更新,如果没有找到符合条件的更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档;如果找到了匹配的文档,就正常更新,upsert非常方便,不必预置集合,同一套代码既能用于创建文档又可以更新文档

其语法和更新的语法一样,只是在更新的基础上多加第三个参数-->true:如下

# 语法:

db.stu.update({"_id": 3}, {用于更新的文档内容}, “这里就是要添加的第三个参数,是固定的!”)

例:

db.stu.update({"_id": 3}, {"$set": {"name": "wang"}}, true)

演示效果如下:

 所以这个方法适用于:以更新条件为基础,如果查到对应数据,则将对应数据更新,如果查不到对应数据,那么则以更新条件新增一条数据!

优点:

设想,如果我们对某种数据操作都是先查数据库,确定是否有对应文档,再决定更新还是插入,那么在多个进程同时操作同一段代码,或者多个进程/线程操作同一个条件时,就会遇到同时对给定条件插入多个文档这样的竞态条件,    但是,使用upsert,既可以避免这种竞态问题,又可以减少代码量,并且这样会更高效,是原子性的

 

 

 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: mongotemplate.upsertMongoTemplate类中的一个方法,用于在MongoDB中执行更新操作。如果指定的文档不存在,则会插入一个新文档。如果指定的文档已经存在,则会更新该文档。这个方法的作用类似于SQL中的“插入或更新”操作。 ### 回答2: mongotemplate.upsert是Spring Data MongoDB提供的方法,用于执行一个upsert操作。upsert是指在执行更新操作时,如果记录不存在,则会插入一条新记录。 在MongoDB中,upsert操作可以使用$setOnInsert操作符来指定插入的值。当使用mongotemplate.upsert方法时,如果满足查询条件的记录存在,则会执行更新操作,更新的内容是通过$set操作符来指定的。如果满足查询条件的记录不存在,则会执行插入操作,插入的内容是通过$setOnInsert操作符来指定的。 例如,假设我们有一个名为users的集合,其中的记录格式如下: { "_id": ObjectId("60c7e8fd387bb5ae091b688a"), "name": "John", "age": 25, "address": "123 Main St" } 我们可以使用mongotemplate.upsert方法来更新或插入记录。比如,我们想更新name为"John"的记录,将age字段增加1: Query query = new Query(Criteria.where("name").is("John")); Update update = new Update().inc("age", 1); mongotemplate.upsert(query, update, Users.class); 如果存在name为"John"的记录,则会执行更新操作,结果为: { "_id": ObjectId("60c7e8fd387bb5ae091b688a"), "name": "John", "age": 26, "address": "123 Main St" } 如果不存在name为"John"的记录,则会执行插入操作,结果为: { "_id": ObjectId("60c7e8fd387bb5ae091b688a"), "name": "John", "age": 1 } 这就是mongotemplate.upsert方法的用法和作用。它可以方便地执行upsert操作,根据条件进行更新或插入操作,提高了开发效率。 ### 回答3: mongotemplate.upsertMongoDB中的一个操作方法,用于在集合中插入或更新数据。如果指定的查询条件在集合中找到匹配记录,则会进行更新操作,如果找不到匹配记录,则会进行插入操作。这个方法是根据指定的查询条件,先在集合中进行查询,然后根据查询结果来判断是插入数据还是更新数据。 在使用mongotemplate.upsert方法时,首先需要创建一个更新对象,用于指定需要更新的字段和值。然后创建一个查询对象,用于指定查询条件。最后将更新对象和查询对象作为参数传递给mongotemplate.upsert方法。 在进行upsert操作时,如果集合中存在满足查询条件的记录,则会将更新对象中的字段值更新到该记录中。如果集合中不存在满足查询条件的记录,则会将更新对象中的字段值插入到集合中,成为一条新的记录。 使用mongotemplate.upsert方法可以方便地实现根据不同的查询条件进行插入或更新操作。这个方法在处理大量数据时尤其有用,可以避免查询和更新操作分开进行,提高了效率。 综上所述,mongotemplate.upsertMongoDB中的一个操作方法,用于在集合中进行插入或更新操作,根据指定的查询条件来判断操作类型。使用这个方法可以方便地实现插入或更新操作,并提高效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值