当前位置: 首页 > news >正文

[Spring Data MongoDB]学习笔记--MongoTemplate插入修改操作

插入操作:

直接给个例子

import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Criteria.query;

…

Person p = new Person("Bob", 33);
mongoTemplate.insert(p);//还可以多加一个参数,来提供collectionname。比如insert(p,"person").

Person qp = mongoTemplate.findOne(query(where("age").is(33)), Person.class);  

collection document的名字有下面几种方式:

1. 默认为类名,并且首字母小写。  比如com.test.Person -> person

2. 通过在类名上增加标记@Document 来指定。

3. 在执行操作时,把collectionname作为参数传递进去。

 

主要操作:

  insert,insertAll, save(当object不存在时,执行insert)。

 

更新操作:

import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query;
import static org.springframework.data.mongodb.core.query.Update;

          ...

  WriteResult wr = mongoTemplate.updateMulti(new Query(where("accounts.accountType").is(Account.Type.SAVINGS)),
                                                            new Update().inc("accounts.$.balance", 50.00),
                                                            Account.class);

主要操作:

  updateFirst(更新第一个匹配的), updateMulti(更新所有匹配的)

 

upsert操作:

template.upsert(query(where("ssn").is(1111).and("firstName").is("Joe").and("Fraizer").is("Update")), update("address", addr), Person.class);

先查询,如果没有符合条件的,会执行插入,插入的值是查询值 + 更新值。

 

findAndModify操作:

mongoTemplate.insert(new Person("Tom", 21));
mongoTemplate.insert(new Person("Dick", 22));
mongoTemplate.insert(new Person("Harry", 23));

Query query = new Query(Criteria.where("firstName").is("Harry"));
Update update = new Update().inc("age", 1);
Person p = mongoTemplate.findAndModify(query, update, Person.class); // return's old person object

assertThat(p.getFirstName(), is("Harry"));
assertThat(p.getAge(), is(23));
p = mongoTemplate.findOne(query, Person.class);
assertThat(p.getAge(), is(24));


// Now return the newly updated document when updating
p = template.findAndModify(query, update, new FindAndModifyOptions().returnNew(true), Person.class);
assertThat(p.getAge(), is(25));

可以通过设置FindAndModifyOptions来设置不同的执行效果。

Query query2 = new Query(Criteria.where("firstName").is("Mary"));
p = mongoTemplate.findAndModify(query2, update, new FindAndModifyOptions().returnNew(true).upsert(true), Person.class);
assertThat(p.getFirstName(), is("Mary"));
assertThat(p.getAge(), is(1));

 

remove操作可以用来进行删除。

转载于:https://www.cnblogs.com/lemonbar/p/3894330.html

相关文章:

  • 在必须返回一个对象时,不要去尝试返回一个引用
  • [转]十个利用矩阵乘法解决的经典题目
  • MVC过滤器基本使用
  • 类的其他特性
  • Windows环境下使用Cmake ndk编译fdk-aac
  • LightOJ - 1148 - Mad Counting
  • ubuntu里打开rar,zip文件方法
  • class 的使用
  • ViewSwitcher的功能和用法
  • 承上启下——牛腩新闻发布系统总结
  • Hyper Prefix Sets
  • Autofac
  • get和post请求的设置
  • 第二届360杯全国大学生信息安全技术大赛部分解题思路(数字取证)
  • php 获取请求参数
  • css布局,左右固定中间自适应实现
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • MySQL的数据类型
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 离散点最小(凸)包围边界查找
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 软件开发学习的5大技巧,你知道吗?
  • 实现菜单下拉伸展折叠效果demo
  • 微服务入门【系列视频课程】
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • C# - 为值类型重定义相等性
  • Java总结 - String - 这篇请使劲喷我
  • ​Linux·i2c驱动架构​
  • #DBA杂记1
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (1)(1.13) SiK无线电高级配置(五)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (rabbitmq的高级特性)消息可靠性
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (汇总)os模块以及shutil模块对文件的操作
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Unity3DUnity3D在android下调试
  • (转)人的集合论——移山之道
  • *上位机的定义
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .Net各种迷惑命名解释
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • @AutoConfigurationPackage的使用
  • @test注解_Spring 自定义注解你了解过吗?
  • [2016.7.Test1] T1 三进制异或
  • [android] 天气app布局练习
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)