MongoDB-JAVA-Driver 3.2版本常用代码全整理(1) - 增删改

转载,原文连接: http://blog.csdn.net/autfish/article/details/51356537

MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。例如用Document替换BasicDBObject、通过Builders类构建Bson替代直接输入$命令等,本文整理了基于3.2版本的常用增删改查操作的使用方法。为了避免冗长的篇幅,分为增删改、查询、聚合、地理索引等几部分。

创建一个maven项目,添加依赖

[java] view plain copy

print?

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.mongodb</groupId>
  4. <artifactId>mongodb-driver</artifactId>
  5. <version>3.2.2</version>
  6. </dependency>
  7. </dependencies>

非maven项目可自行下载jar包

http://central.maven.org/maven2/org/mongodb/mongo-java-driver/3.2.2/mongo-java-driver-3.2.2.jar

创建基础代码测试连接

[java] view plain copy

print?

  1. public class CudExamples {
  2. public static void main(String[] args) throws ParseException {
  3. //根据实际环境修改ip和端口
  4. MongoClient mongoClient = new MongoClient("localhost", 27017);
  5. MongoDatabase database = mongoClient.getDatabase("lesson");
  6. MongoCollection<Document> mc = database.getCollection("language");
  7. //插入一个文档
  8. mc.insertOne(new Document("oop", "java"));
  9. System.out.println(mc.findOneAndDelete(new Document("oop", "java")));
  10. mongoClient.close();
  11. }
  12. }

如果输出结果为Document{{_id=573099877bee0e1710d52f4b, oop=java}}表示环境配置正确。

改造CudExamples类以方便演示每种操作对集合的影响

[java] view plain copy

print?

  1. public class CudExamples {
  2. public static void main(String[] args) throws ParseException {
  3. MongoClient mongoClient = new MongoClient("localhost", 27017);
  4. MongoDatabase database = mongoClient.getDatabase("lesson");
  5. CudExamples client = new CudExamples(database);
  6. client.show();
  7. mongoClient.close();
  8. }
  9. private MongoDatabase database;
  10. public CudExamples(MongoDatabase database) {
  11. this.database = database;
  12. }
  13. public void show() {
  14. MongoCollection<Document> mc = database.getCollection("language");
  15. //每次执行前清空集合以方便重复运行
  16. mc.drop();
  17. mc.insertOne(new Document("oop", "java"));
  18. printCollection("insert java", mc);
  19. }
  20. //打印查询的结果集
  21. public void printCollection(String doing, MongoCollection<Document> mc) {
  22. System.out.println(doing);
  23. FindIterable<Document> iterable = mc.find();
  24. iterable.forEach(new Block<Document>() {
  25. public void apply(final Document document) {
  26. System.out.println(document);
  27. }
  28. });
  29. System.out.println("------------------------------------------------------");
  30. System.out.println();
  31. }
  32. }

如上面代码所示,把所有的操作集中在show()方法中演示,并且在执行后打印集合以观察对集合的影响。下面来填充show()方法,注意需要静态导入Updates.*

import static com.mongodb.client.model.Updates.*;

[java] view plain copy

print?

  1. mc.insertOne(new Document("oop", "java"));
  2. printCollection("insert java", mc);
  3. //插入一个包含两个字段的文档
  4. Document doc = new Document("oop", "csharp").append("copyright", "microsoft");
  5. mc.insertOne(doc);
  6. printCollection("insert csharp", mc);
  7. //查找并修改一个文档
  8. mc.findOneAndReplace(new Document("oop", "java"), new Document("oop", "java").append("copyright", "oracle"));
  9. printCollection("findAndReplace java", mc);
  10. //删除一个文档
  11. mc.deleteOne(new Document("oop", "java"));
  12. printCollection("delete java", mc);
  13. //删除全部文档
  14. mc.deleteMany(new Document());
  15. printCollection("delete all", mc);
  16. //重新插入测试文档
  17. mc.insertOne(new Document("oop", "java").append("copyright", "oracle"));
  18. mc.insertOne(new Document("oop", "csharp").append("copyright", "microsoft"));
  19. printCollection("insert java,csharp and swift", mc);
  20. //$set 文档中存在指定字段则修改,没有则添加
  21. mc.updateMany(new Document(), set("rank", 100));
  22. printCollection("$set all rank 100", mc);
  23. //$unset 文档中存在指定字段则删除该字段
  24. mc.updateOne(new Document("oop", "csharp"), unset("rank"));
  25. printCollection("unset csharp rank", mc);
  26. //$inc 文档中存在指定字段则相加,没有则添加
  27. mc.updateOne(new Document("oop", "csharp"), inc("rank", 30));
  28. printCollection("$inc csharp rank 30", mc);
  29. mc.updateOne(new Document("oop", "csharp"), inc("rank", 31));
  30. printCollection("$inc csharp rank 31", mc);
  31. //$setOnInsert 在更新时指定upsert=true并实际触发了插入操作时生效
  32. mc.updateOne(new Document("oop", "swift").append("copyright", "apple"), setOnInsert("rank", 100), new UpdateOptions().upsert(true));
  33. printCollection("$setOnInsert rank 100 for swift", mc);
  34. //$mul 相乘
  35. mc.updateOne(new Document("oop", "java"), mul("rank", 0.2));
  36. printCollection("$mul java rank: 0.2", mc);
  37. //$rename 重命名
  38. mc.updateMany(new Document(), rename("rank", "ranks"));
  39. printCollection("$rename all rank to ranks", mc);
  40. //$min 取当前值和指定值之间比较小的
  41. mc.updateMany(new Document(), min("ranks", 50));
  42. printCollection("$min all ranks: 50", mc);
  43. //$max 取当前值和指定值之间比较大的
  44. mc.updateMany(new Document(), max("ranks", 40));
  45. printCollection("$max all ranks: 40", mc);
  46. //$currentDate
  47. mc.updateMany(new Document("oop", "java"), currentDate("add"));
  48. printCollection("$currentDate java", mc);
  49. //$currentTimestamp
  50. mc.updateMany(new Document("oop", "java"), currentTimestamp("lastModified"));
  51. printCollection("$currentTimestamp java", mc);
  52. //$addToSet 添加一个元素到不重复集合
  53. mc.updateMany(new Document("oop", "java"), addToSet("keywords", "for"));
  54. mc.updateMany(new Document("oop", "java"), addToSet("keywords", "for"));
  55. printCollection("$addToSet java keywords: for", mc);
  56. //$addEachToSet 添加一组元素到不重复集合
  57. mc.updateMany(new Document("oop", "java"), addEachToSet("keywords", Arrays.asList("while", "true", "do", "new", "override")));
  58. mc.updateMany(new Document("oop", "java"), addEachToSet("keywords", Arrays.asList("while", "true", "do", "new", "override")));
  59. printCollection("$addEachToSet java keywords: while,true,do,new,override", mc);
  60. //$popFirst 删除第一个元素
  61. mc.updateMany(new Document("oop", "java"), popFirst("keywords"));
  62. printCollection("$popFirst java keywords", mc);
  63. //$popLast 删除最后一个元素
  64. mc.updateMany(new Document("oop", "java"), popLast("keywords"));
  65. printCollection("$popLast java keywords", mc);
  66. //$pull 删除指定元素
  67. mc.updateMany(new Document("oop", "java"), pull("keywords", "new"));
  68. printCollection("$pull java keywords: new", mc);
  69. //$pullByFilter 根据Filters删除
  70. mc.updateMany(new Document("oop", "java"), pullByFilter(Filters.gte("keywords", "true")));
  71. printCollection("$pullByFilter java keywords: true", mc);
  72. //$pullAll 删除一组元素
  73. mc.updateMany(new Document("oop", "java"), pullAll("keywords", Arrays.asList("while", "true", "do", "new", "override")));
  74. printCollection("$pullAll java keywords", mc);
  75. //$push 添加一个元素到可重复集合
  76. mc.updateMany(new Document("oop", "java"), push("scores", 89));
  77. printCollection("$push java scores: 89", mc);
  78. //$pushEach 添加一组元素到可重复集合
  79. mc.updateMany(new Document("oop", "java"), pushEach("scores", Arrays.asList(89, 90, 92)));
  80. printCollection("$pushEach java scores: 89,90,92", mc);
  81. //在集合的指定位置插入一组元素
  82. mc.updateMany(new Document("oop", "java"), pushEach("scores", Arrays.asList(11, 12, 13), new PushOptions().position(0)));
  83. printCollection("$pushEach java scores: 11,12,13 at position 0", mc);
  84. //在集合的指定位置插入一组元素并倒序排列
  85. mc.updateMany(new Document("oop", "java"), pushEach("scores", Arrays.asList(40, 41), new PushOptions().sort(-1)));
  86. printCollection("$pushEach java scores: 40,41 and sort(-1)", mc);
  87. //在集合的指定位置插入一组元素, 倒序排列后保留前3个
  88. mc.updateMany(new Document("oop", "java"), pushEach("scores", Arrays.asList(60, 61), new PushOptions().sort(-1).slice(3)));
  89. printCollection("$pushEach java scores: 60,61 and sort(-1) and slice(3)", mc);
  90. //插入一组内嵌文档
  91. Bson bson = pushEach("experts",
  92. Arrays.asList(new Document("first", "Rod").append("last", "Johnson"),
  93. new Document("first", "Doug").append("last", "Cutting")));
  94. mc.updateOne(new Document("oop", "java"), bson);
  95. printCollection("$pushEach", mc);
  96. //combine 组合Bson
  97. bson = combine(set("author", "James Gosling"), set("version", "8.0"));
  98. mc.updateOne(new Document("oop", "java"), bson);
  99. printCollection("$combine", mc);

(完)

时间: 2024-08-24 14:30:19

MongoDB-JAVA-Driver 3.2版本常用代码全整理(1) - 增删改的相关文章

MongoDB-JAVA-Driver 3.2版本常用代码全整理(2) - 查询

MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别.例如用Document替换BasicDBObject.通过Builders类构建Bson替代直接输入$命令等,本文整理了基于3.2版本的常用增删改查操作的使用方法.为了避免冗长的篇幅,分为增删改.查询.聚合.地理索引等几部分. 先看用于演示的类的基本代码 import static com.mongodb.client.model.Filters.*; import static com.mongodb.

Android--新手必备的常用代码片段整理(二)

收集设备信息用于信息统计分析 是否有SD卡 动态隐藏软键盘 动态显示软键盘 动态显示或者是隐藏软键盘 主动回到Home后台运行 获取状态栏高度 获取状态栏高度标题栏ActionBar高度 获取MCCMNC代码 SIM卡运营商国家代码和运营商网络代码 返回移动网络运营商的名字 返回移动终端类型 判断手机连接的网络类型2G3G4G 判断当前手机的网络类型WIFI还是234G 收集设备信息,用于信息统计分析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Java学习不走弯路教程(14 代码结构整理)

代码结构整理 一. 前言 在前上一章教程中,介绍了和浏览器的通讯.本章将在上一章的基础上,进一步扩展程序. 注:1.本文针对初学Java的同学训练学习思路,请不要太纠结于细节问题.2.本文旨在达到抛砖引玉的效果,希望大家扩展本例子,以学到更多知识的精髓. 学习本章需要准备的知识:1.读完本系列教程的前面章节.二. 步入正题 话不多说,大家自己理解,下面步入正题: 为了在后面的课程中走的更远,我们来整理一下代码的结构. 首先我们把业务逻辑都放在app包下,并且将这个包分为三层,web,servic

Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作

此篇文章主要讲述DAO.Java Bean和Servlet实现操作数据库,把链接数据库.数据库操作.前端界面显示分模块化实现.其中包括数据的CRUD增删改查操作,并通过一个常用的JSP网站前端模板界面进行描述.参考前文: Java+MyEclipse+Tomcat (一)配置过程及jsp网站开发入门 Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交 Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中 Java+MyE

【java】用javaSE来实现对mysql数据库的增删改查

主程序: import Bean.StudentBean;import Impl.StudentImpl; public class T7 {    public static void main(String[] args) {        StudentImpl stdimp = new StudentImpl();//        StudentBean student = new StudentBean("halala", "woman", "

git学习笔记03-本地git常用操作及原理-文件增删改

1.查看git状态 git status  这个可以告诉我们对git做了哪些操,比如增删改 2.既然我们修改了东西,有的时候想看看修改了什么,毕竟我们的记忆力并不如电脑 git diff 文件名 (默认和暂存区比较.啥事暂存区后面说) 3.修改了之后我提交了,我想看看提交的日志git log -- pretty = oneline  (后面这是格式化用的,可以不写) 4.突然想起来我提交的这个有错误怎么办,我想恢复到之前的版本 git reset --hard HEAD^ ( HEAD^ 是之前

mysql常用语句、命令(增删改查功能)

修改数据库的字符集    mysql>use mydb    mysql>alter database mydb character set utf8;创建数据库指定数据库的字符集    mysql>create database mydb character set utf8; 查看database的字符集! show variables like 'collation_%';show variables like 'character_set_%'; 一.系统操作 1. 打开服务:n

Sonar 常用代码规则整理

摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处id: 83 name: A method/constructor shouldnt explicitly throw java.lang.Exception type: CODE SMELL severity: MAJOR Comment: It is unclear which exceptions that can b

iOS开发常用代码片段整理

1.判断邮箱格式是否正确的代码 //利用正则表达式验证 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES%@&quo