摘要:本篇博文为的中一篇,前面介绍简单的查询使用,这一篇重点则放在插入数据基本使用首先是准备好基本环境,可以参考博文高级篇之基本环境搭建与使用高级篇之查询基本使用姿势新增一条数据一个基本数据称为,和不一样,没有强制约束哪些字段,可以随
本篇博文为mongodb的curd中一篇,前面介绍简单的查询使用,这一篇重点则放在插入数据;
I. 基本使用首先是准备好基本环境,可以参考博文
181213-SpringBoot高级篇MongoDB之基本环境搭建与使用
190113-SpringBoot高级篇MongoDB之查询基本使用姿势
1. 新增一条数据MongoDB一个基本数据称为document,和mysql不一样,没有强制约束哪些字段,可以随意的插入,下面是一个简单的插入演示
private static final String COLLECTION_NAME = "demo"; @Autowired private MongoTemplate mongoTemplate; /** * 新增一条记录 */ public void insert() { JSONObject object = new JSONObject(); object.put("name", "一灰灰blog"); object.put("desc", "欢迎关注一灰灰Blog"); object.put("age", 28); // 插入一条document mongoTemplate.insert(object, COLLECTION_NAME); JSONObject ans = mongoTemplate .findOne(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(28)), JSONObject.class, COLLECTION_NAME); System.out.println(ans); }
使用的关键地方为一行: mongoTemplate.insert(object, COLLECTION_NAME);
第一个参数为待插入的document
第二个参数为collection name (相当于mysql的table)
执行后输出结果为如下
{"name":"一灰灰blog","_id":{"counter":12472353,"date":1548333180000,"machineIdentifier":14006254,"processIdentifier":17244,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":28,"desc":"欢迎关注一灰灰Blog"}2. 批量插入
一次插入多条记录,传集合进去即可
/** * 批量插入 */ public void insertMany() { List
返回结果如下:
Query Insert Records: [{t_id=0, wechart=一灰灰blog, _id=5c49b07cd5b7ee435cbe5022, blog=[http://spring.hhui.top, http://blog.hhui.top], nums=210}, {t_id=1, wechart=一灰灰blog, _id=5c49b07cd5b7ee435cbe5023, blog=[http://spring.hhui.top, http://blog.hhui.top], nums=210}, {t_id=2, wechart=一灰灰blog, _id=5c49b07cd5b7ee435cbe5024, blog=[http://spring.hhui.top, http://blog.hhui.top], nums=210}]3. upsert,不存在才插入
我们希望在插入之前,判断数据是否存在,如果不存在则插入;如果存在则更新;此时就可以采用upsert来使用,一般三个参数
mongoTemplate.upsert(Query query, Update update, String collectionName)
第一个为查询条件,第二个为需要更新的字段,最后一个指定对应的collection,一个简单的实例如下
/** * 数据不存在,通过 upsert 新插入一条数据 * * set 表示修改key对应的value * addToSet 表示在数组中新增一条 */ public void upsertNoMatch() { // addToSet 表示将数据塞入document的一个数组成员中 UpdateResult upResult = mongoTemplate.upsert(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(100)), new Update().set("age", 120).addToSet("add", "额外增加"), COLLECTION_NAME); System.out.println("nomatch upsert return: " + upResult); Listre = mongoTemplate .find(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(120)), JSONObject.class, COLLECTION_NAME); System.out.println("after upsert return should not be null: " + re); System.out.println("------------------------------------------"); }
输出结果如下:
nomatch upsert return: AcknowledgedUpdateResult{matchedCount=0, modifiedCount=0, upsertedId=BsonObjectId{value=5c49b07ce6652f7e1add1ea2}} after upsert return should not be null: [{"add":["额外增加"],"name":"一灰灰blog","_id":{"counter":14491298,"date":1548333180000,"machineIdentifier":15099183,"processIdentifier":32282,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":120}] ------------------------------------------4. upsert,存在则更新
前面的demo是演示不存在,那么存在数据呢?
/** * 只有一条数据匹配,upsert 即表示更新 */ public void upsertOneMatch() { // 数据存在,使用更新 UpdateResult result = mongoTemplate.upsert(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(120)), new Update().set("age", 100), COLLECTION_NAME); System.out.println("one match upsert return: " + result); Listans = mongoTemplate .find(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(100)), JSONObject.class, COLLECTION_NAME); System.out.println("after update return should be one: " + ans); System.out.println("------------------------------------------"); }
输出结果如下,注意下面的输出数据的 _id,正视前面插入的那条数据,两个数据唯一的不同,就是age被修改了
one match upsert return: AcknowledgedUpdateResult{matchedCount=1, modifiedCount=1, upsertedId=null} after update return should be null: [{"add":["额外增加"],"name":"一灰灰blog","_id":{"counter":14491298,"date":1548333180000,"machineIdentifier":15099183,"processIdentifier":32282,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":100}]5. upsert,多条满足时
如果query条件命中多条数据,怎么办?会修改几条数据呢?
/** * 两条数据匹配时,upsert 将只会更新一条数据 */ public void upsertTwoMatch() { // 多条数据满足条件时,只会修改一条数据 System.out.println("------------------------------------------"); Listre = mongoTemplate .find(new Query(Criteria.where("name").is("一灰灰blog").and("age").in(Arrays.asList(28, 100))), JSONObject.class, COLLECTION_NAME); System.out.println("original record: " + re); UpdateResult result = mongoTemplate .upsert(new Query(Criteria.where("name").is("一灰灰blog").and("age").in(Arrays.asList(28, 100))), new Update().set("age", 120), COLLECTION_NAME); System.out.println("two match upsert return: " + result); re = mongoTemplate.find(new Query(Criteria.where("name").is("一灰灰blog").and("age").is(120)), JSONObject.class, COLLECTION_NAME); System.out.println("after upsert return size should be 1: " + re); System.out.println("------------------------------------------"); }
根据实际输出进行查看,发现只有一条数据被修改;另外一条保持不变,结果如下
------------------------------------------ original record: [{"name":"一灰灰blog","_id":{"counter":12472353,"date":1548333180000,"machineIdentifier":14006254,"processIdentifier":17244,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":28,"desc":"欢迎关注一灰灰Blog"}, {"add":["额外增加"],"name":"一灰灰blog","_id":{"counter":14491298,"date":1548333180000,"machineIdentifier":15099183,"processIdentifier":32282,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":100}] two match upsert return: AcknowledgedUpdateResult{matchedCount=1, modifiedCount=1, upsertedId=null} after upsert return size should be 1: [{"name":"一灰灰blog","_id":{"counter":12472353,"date":1548333180000,"machineIdentifier":14006254,"processIdentifier":17244,"time":1548333180000,"timeSecond":1548333180,"timestamp":1548333180},"age":120,"desc":"欢迎关注一灰灰Blog"}] ------------------------------------------II. 其他 0. 项目
工程:spring-boot-demo
module: mongo-template
相关博文
181213-SpringBoot高级篇MongoDB之基本环境搭建与使用
190113-SpringBoot高级篇MongoDB之查询基本使用姿势
1. 一灰灰Blog一灰灰Blog个人博客 https://blog.hhui.top
一灰灰Blog-Spring专题博客 http://spring.hhui.top
一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛
2. 声明尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
微博地址: 小灰灰Blog
QQ: 一灰灰/3302797840
3. 扫描关注一灰灰blog
知识星球
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/19470.html
摘要:原文高级篇之修改基本使用姿势本篇依然是中的一篇,主要介绍的更新,主要内容如下常见类型成员的修改数组类型成员的增删改类型成员的增删改基本使用首先是准备好基本环境,可以参考博文高级篇之基本环境搭建与使用高级篇之查询基本使用姿势在开 原文: 190218-SpringBoot高级篇MongoDB之修改基本使用姿势 本篇依然是MongoDB curd中的一篇,主要介绍document的更新,...
摘要:学习一个新的数据库,一般怎么下手呢基本的没跑了,当可以熟练的增删改查一个数据库时,可以说对这个数据库算是入门了,如果需要更进一步的话,就需要了解下数据库的特性,比如索引事物锁分布式支持等本篇博文为的入门篇,将介绍一下基本的查询操作,在中可以 学习一个新的数据库,一般怎么下手呢?基本的CURD没跑了,当可以熟练的增、删、改、查一个数据库时,可以说对这个数据库算是入门了,如果需要更进一步的...
摘要:学习一个新的数据库,一般怎么下手呢基本的没跑了,当可以熟练的增删改查一个数据库时,可以说对这个数据库算是入门了,如果需要更进一步的话,就需要了解下数据库的特性,比如索引事物锁分布式支持等本篇博文为的入门篇,将介绍一下基本的查询操作,在中可以 学习一个新的数据库,一般怎么下手呢?基本的CURD没跑了,当可以熟练的增、删、改、查一个数据库时,可以说对这个数据库算是入门了,如果需要更进一步的...
阅读 2689·2021-11-08 13:16
阅读 2366·2021-10-18 13:30
阅读 2236·2021-09-27 13:35
阅读 1992·2019-08-30 15:55
阅读 2441·2019-08-30 13:22
阅读 575·2019-08-30 11:24
阅读 2073·2019-08-29 12:33
阅读 1812·2019-08-26 12:10