mongo中insert和upsert方法使用

mongoDB在go中使用是单表查询,每条数据的插入都是按照:数据唯一字段是否存在,存在则报错,反之,就正常插入。mongo提供了两种插入方法,insert和upsert
insert介绍
insert是插入方法,这是一个根据拼接数据库字段,自动插入的方法,但是这个方法需要我们自己提前去判断数据是否存在,然后将我们定义的body体数据给插入到mongo库中。所以就会造成我们需要两次操作数据库表。
在这里插入图片描述

在这里插入图片描述
如上图:1.我们需要定义条件,2.根据条件查询数据库判断数据是否重复,
3.自己生成一个id交给数据库,4,若是按照模拟java的MVC分层模式,那么需要对定义的参数体schema类转换为实体类entity。最后我们根据转换的实体类作为真正需要添加的body体,然后再次调用数据库操作insert插入数据。返回自定义数据id。

加粗样式这样我们发现insert需要两次去进行数据库操作,所以为了简便这个方式,mongo提供了一个可以一步直接插入的方式,即:upsert

upsert
upsert官方给出的解释是如果数据存在,则进行更新操作,如果数据不存在,则进行插入数据(也就是插入一条数据&#x

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在 Spring Data MongoDB ,可以使用 `MongoTemplate` 来执行 upsert 操作。`MongoTemplate` 提供了 `upsert()` 方法来进行 upsert 操作,该方法接收一个 `Query` 对象和一个 `Update` 对象作为参数。 以下是一个示例: ```java Query query = new Query(Criteria.where("name").is("John")); Update update = new Update().set("age", 30).set("email", "john@example.com"); mongoTemplate.upsert(query, update, "users"); ``` 在这个例子,我们创建了一个 `Query` 对象来指定需要更新的文档的查询条件,创建了一个 `Update` 对象来指定更新操作,并将它们作为参数传递给了 `MongoTemplate` 的 `upsert()` 方法。第三个参数是集合的名称,如果集合不存在,则会自动创建。 需要注意的是,在 `Update` 对象,可以使用 `$set` 操作符来设置字段的值。`$set` 操作符会将指定字段的值更新为指定的值,如果指定的字段不存在,则会创建该字段并设置值。 另外,如果需要在 upsert 操作使用原子操作符或者其他操作符,可以像下面这样进行操作: ```java Query query = new Query(Criteria.where("name").is("John")); Update update = new Update() .inc("age", 1) .push("emails", "john@example.com") .setOnInsert("createdAt", new Date()); mongoTemplate.upsert(query, update, "users"); ``` 在这个例子,我们使用了 `$inc` 操作符来对 `age` 字段进行自增操作,使用 `$push` 操作符来添加一个新的电子邮件地址,使用 `$setOnInsert` 操作符来设置创建时间。在 upsert 操作,`$setOnInsert` 操作符只在插入新文档时生效,如果更新的文档已经存在,则不会生效。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值