2013年,写的CRUD太简单了,今天在原来的基础上,稍微完善了下,用了更多语法,比如排序sort、in语句等。

参考了《Mongodb权威指南-第1版-高清》,等下上传到CSDN下载频道,免积分下载。

代码写得够清晰了,不再过多解释。

  1. package mongodb;
  2.  
  3. import java.net.UnknownHostException;
  4. import java.util.Date;
  5.  
  6. import com.mongodb.BasicDBList;
  7. import com.mongodb.BasicDBObject;
  8. import com.mongodb.CommandResult;
  9. import com.mongodb.DB;
  10. import com.mongodb.DBCollection;
  11. import com.mongodb.DBCursor;
  12. import com.mongodb.DBObject;
  13. import com.mongodb.Mongo;
  14. import com.mongodb.WriteResult;
  15.  
  16. /**
  17. * MongoDB-CRUD Demo。
  18. *
  19. *
  20. */
  21. public class MongoDBDemo {
  22. // /////////////数据库地址常量/////////////////////
  23. /**
  24. * 数据库地址
  25. */
  26. public static final String DEFAULT_HOST = "localhost";// localhost
  27. /**
  28. * 端口号
  29. */
  30. public static final int DEFAULT_PORT = 27017;
  31. // //////////////数据库名称和集合常量/////////////////
  32. /**
  33. * 数据库名称
  34. */
  35. public static final String DB_BLOG = "blog";
  36. /**
  37. * 集合名称
  38. */
  39. public static final String DB_BLOG_COLLECTION = "article";
  40.  
  41. // /////////////文章Article的属性名称常量/////////////////////
  42. /**
  43. * 标题
  44. */
  45. public static final String TITLE = "title";
  46. /**
  47. * 内容
  48. */
  49. public static final String CONTENT = "content";
  50. /**
  51. * 作者
  52. */
  53. public static final String AUTHOR = "author";
  54. /**
  55. * 日期
  56. */
  57. public static final String DATE = "date";
  58. public static final String ID = "id";
  59.  
  60. public static void main(String[] args) throws UnknownHostException {
  61.  
  62. Mongo mogo = new Mongo(DEFAULT_HOST, DEFAULT_PORT);
  63. // 获得数据库
  64. DB blogDb = mogo.getDB(DB_BLOG);
  65. DBCollection articleCollection = blogDb
  66. .getCollection(DB_BLOG_COLLECTION);
  67.  
  68. buildThreeArticles(articleCollection);
  69.  
  70. // 查找并打印作者为"FansUnion"的文章
  71. BasicDBObject searchArticleByAuthor = new BasicDBObject();
  72. searchArticleByAuthor.append(AUTHOR, "FansUnion");
  73.  
  74. demoFindByField(articleCollection, searchArticleByAuthor);
  75. demoFindAndSort(articleCollection, searchArticleByAuthor);
  76.  
  77. BasicDBObject searchArticleById = new BasicDBObject();
  78. searchArticleById.append(ID, 3L);
  79. demoFindById(articleCollection, searchArticleById);
  80.  
  81. demoFindSpecialField(articleCollection, searchArticleById);
  82.  
  83. demoFindWithIn(articleCollection);
  84.  
  85. demoUpdateWithTwoWay(articleCollection, searchArticleByAuthor);
  86.  
  87. demoRemove(articleCollection);
  88. // 集合中的文档数量
  89. long count = articleCollection.count();
  90. println("删除了刚刚新建的3条记录,剩余count=" + count);
  91.  
  92. // 关闭连接
  93. mogo.close();
  94. }
  95.  
  96. //删除数据
  97. private static void demoRemove(DBCollection articleCollection) {
  98. // 删除
  99. BasicDBObject removeCondition = new BasicDBObject();
  100. removeCondition.append(AUTHOR, "FansUnion");
  101. articleCollection.remove(removeCondition);
  102.  
  103. BasicDBObject removeCondition2 = new BasicDBObject();
  104. removeCondition.append(TITLE, "HelloWorld");
  105. // 删除,并查看是否有报错
  106. WriteResult writeResult = articleCollection.remove(removeCondition2);
  107. CommandResult commandResult = writeResult.getLastError();
  108. println("查看error信息,发现err字段为空" + commandResult.toString());
  109.  
  110. BasicDBObject removeAll = new BasicDBObject();
  111. articleCollection.remove(removeAll);
  112. }
  113.  
  114. //2种方式更新对象
  115. private static void demoUpdateWithTwoWay(DBCollection articleCollection,
  116. BasicDBObject searchArticleByAuthor) {
  117. // 把标题为"HelloWorld"的文章的作者,修改为“小雷”
  118. println("把标题为HelloWorld的文章的作者,修改为小雷,只修改AUTHOR1个字段");
  119. // 查询条件:标题为"HelloWorld"
  120. BasicDBObject updateCondition = new BasicDBObject();
  121. searchArticleByAuthor.append(TITLE, "HelloWorld");
  122.  
  123. BasicDBObject newHelloWorldArticle = new BasicDBObject();
  124. newHelloWorldArticle.append(AUTHOR, "小雷");
  125.  
  126. // 第1种方式-修改,只修改指定的字段("$set","$inc"都是修改器)
  127. // update Article set author="小雷" where title='HelloWorld'
  128. DBObject updateSetValue = new BasicDBObject("$set",
  129. newHelloWorldArticle);
  130. articleCollection.update(updateCondition, updateSetValue);
  131. // 打印第1次修改过的"HelloWorld"文章
  132. DBObject helloWordlArticle2 = articleCollection
  133. .findOne(updateCondition);
  134. print(helloWordlArticle2);
  135.  
  136. // 第2种方式-修改
  137. // update Article set author="小雷",title=null,content=null,date=null
  138. // where title='HelloWorld'
  139. println("把标题为HelloWorld的文章的作者,修改为小雷,修改了所有的字段");
  140. articleCollection.update(updateCondition, newHelloWorldArticle);
  141. DBObject helloWordlArticle = articleCollection.findOne(updateCondition);
  142. // 打印第2次修改过的"HelloWorld"文章
  143. print(helloWordlArticle);
  144. }
  145.  
  146. //Mongodb中的in语句
  147. private static void demoFindWithIn(DBCollection articleCollection) {
  148. // IN查询
  149. println("查找并打印ID为1和2的文章");
  150. // List list = Arrays.asList(1,2);
  151. // Long[] array= new Long[]{1L,2L};
  152.  
  153. BasicDBList values = new BasicDBList();
  154. values.add(1);
  155. values.add(2);
  156.  
  157. DBObject inQuery = new BasicDBObject("$in", values);
  158.  
  159. DBObject con = new BasicDBObject();
  160. con.put(ID, inQuery);
  161. DBCursor cursorIdArray = articleCollection.find(con);
  162. println("个数:" + cursorIdArray.count());
  163. while (cursorIdArray.hasNext()) {
  164. print(cursorIdArray.next());
  165. }
  166. }
  167.  
  168. //查询特定的字段
  169. private static void demoFindSpecialField(DBCollection articleCollection,
  170. BasicDBObject searchArticleById) {
  171. println("查找并打印ID为3的文章2,只查询TITLE字段");
  172. BasicDBObject b = new BasicDBObject();
  173. b.append(TITLE, 1);
  174. DBCursor cursor3 = articleCollection.find(searchArticleById, b);
  175. println("个数:" + cursor3.count());
  176. while (cursor3.hasNext()) {
  177. print(cursor3.next());
  178. }
  179. // cursor3.close();//在没有这行代码的情况下,同样的程序,出现了1次,个数为4,仔细看,发现他们的内置ID不一样
  180. // 可能是上一次执行的删除,还没有完成?
  181. //这个地方是一个疑问,但是复现不了
  182. }
  183.  
  184. //根据ID查找对象
  185. private static BasicDBObject demoFindById(DBCollection articleCollection,
  186. BasicDBObject searchArticleById) {
  187. // 查找并打印ID为3的文章
  188. println("查找并打印ID为3的文章");
  189.  
  190. DBCursor cursor2 = articleCollection.find(searchArticleById);
  191. println("个数:" + cursor2.count());
  192. while (cursor2.hasNext()) {
  193. print(cursor2.next());
  194. }
  195. cursor2.close();
  196. return searchArticleById;
  197. }
  198.  
  199. //查找对象,并排序
  200. private static void demoFindAndSort(DBCollection articleCollection,
  201. BasicDBObject searchArticleByAuthor) {
  202. // 查找并打印作者为"FansUnion"的文章,按照ID降序排列
  203. println("查找并打印作者为FansUnion的文章,降序排列,查询出来的ID一次为3,2,1");
  204. BasicDBObject orderByIdDesc = new BasicDBObject();
  205. orderByIdDesc.append(ID, -1);
  206. DBCursor cursorIdDesc = articleCollection.find(searchArticleByAuthor)
  207. .sort(orderByIdDesc);
  208. while (cursorIdDesc.hasNext()) {
  209. print(cursorIdDesc.next());
  210. }
  211. }
  212.  
  213. //根据字段查找对象
  214. private static void demoFindByField(DBCollection articleCollection,
  215. BasicDBObject searchArticleByAuthor) {
  216. println("查找并打印作者为FansUnion的文章,查询出来的ID一次为1,2,3");
  217. DBCursor cursor = articleCollection.find(searchArticleByAuthor);
  218. while (cursor.hasNext()) {
  219. print(cursor.next());
  220. }
  221. cursor.close();// 网上和书中的的例子,没有关闭游标,官方JDK文档“kills the current cursor on
  222. // the server.”
  223. }
  224.  
  225. // 构造3个文章,插入的ID顺序是1,2,3
  226. private static void buildThreeArticles(DBCollection articleCollection) {
  227.  
  228. BasicDBObject article = buildArticle("做好社会主义的接班人", "好好学习,天天向上",
  229. "FansUnion", new Date(), 1L);
  230. BasicDBObject article2 = buildArticle("做好资本主义的掘墓人", "拼命干活,时时向上",
  231. "FansUnion", new Date(), 2L);
  232. BasicDBObject article3 = buildArticle("HelloWorld",
  233. "I am a MongoDb demo.", "FansUnion", new Date(), 3L);
  234. // 增加若干文章
  235. articleCollection.insert(article);
  236. articleCollection.insert(article2);
  237. articleCollection.insert(article3);
  238.  
  239. println("插入文章的个数:" + articleCollection.count());
  240. }
  241.  
  242. // 打印对象
  243. private static void print(DBObject article) {
  244. // println("-----------------------");
  245. println("内置ID:" + article.get("_id"));
  246. println("标题:" + article.get(TITLE));
  247. println("内容:" + article.get(CONTENT));
  248. println("作者:" + article.get(AUTHOR));
  249. println("日期:" + article.get(DATE));
  250. println("ID:" + article.get(ID));
  251. println("-----------------------");
  252. }
  253.  
  254. private static void println(Object object) {
  255. System.out.println(object);
  256. }
  257.  
  258. /**
  259. * 构造1个文章对象
  260. *
  261. * @param title
  262. * 标题
  263. * @param content
  264. * 内容
  265. * @param author
  266. * 作者
  267. * @param date
  268. * 日期
  269. * @return 文章对象
  270. */
  271. private static BasicDBObject buildArticle(String title, String content,
  272. String author, Date date, Long id) {
  273. BasicDBObject article = new BasicDBObject();
  274. article.append(TITLE, title);
  275. article.append(CONTENT, content);
  276. article.append(AUTHOR, author);
  277. article.append(DATE, date);
  278. article.append(ID, id);
  279. return article;
  280. }
  281. }

代码执行结果

插入文章的个数:3
查找并打印作者为FansUnion的文章,查询出来的ID一次为1,2,3
内置ID:561baace3aea5b925fddc83c
标题:做好社会主义的接班人
内容:好好学习,天天向上
作者:FansUnion
日期:Mon Oct 12 20:42:54 CST 2015
ID:1
-----------------------
内置ID:561baace3aea5b925fddc83d
标题:做好资本主义的掘墓人
内容:拼命干活,时时向上
作者:FansUnion
日期:Mon Oct 12 20:42:54 CST 2015
ID:2
-----------------------
内置ID:561baace3aea5b925fddc83e
标题:HelloWorld
内容:I am a MongoDb demo.
作者:FansUnion
日期:Mon Oct 12 20:42:54 CST 2015
ID:3
-----------------------
查找并打印作者为FansUnion的文章,降序排列,查询出来的ID一次为3,2,1
内置ID:561baace3aea5b925fddc83e
标题:HelloWorld
内容:I am a MongoDb demo.
作者:FansUnion
日期:Mon Oct 12 20:42:54 CST 2015
ID:3
-----------------------
内置ID:561baace3aea5b925fddc83d
标题:做好资本主义的掘墓人
内容:拼命干活,时时向上
作者:FansUnion
日期:Mon Oct 12 20:42:54 CST 2015
ID:2
-----------------------
内置ID:561baace3aea5b925fddc83c
标题:做好社会主义的接班人
内容:好好学习,天天向上
作者:FansUnion
日期:Mon Oct 12 20:42:54 CST 2015
ID:1
-----------------------
查找并打印ID为3的文章
个数:1
内置ID:561baace3aea5b925fddc83e
标题:HelloWorld
内容:I am a MongoDb demo.
作者:FansUnion
日期:Mon Oct 12 20:42:54 CST 2015
ID:3
-----------------------
查找并打印ID为3的文章2,只查询TITLE字段
个数:1
内置ID:561baace3aea5b925fddc83e
标题:HelloWorld
内容:null
作者:null
日期:null
ID:null
-----------------------
查找并打印ID为1和2的文章
个数:2
内置ID:561baace3aea5b925fddc83c
标题:做好社会主义的接班人
内容:好好学习,天天向上
作者:FansUnion
日期:Mon Oct 12 20:42:54 CST 2015
ID:1
-----------------------
内置ID:561baace3aea5b925fddc83d
标题:做好资本主义的掘墓人
内容:拼命干活,时时向上
作者:FansUnion
日期:Mon Oct 12 20:42:54 CST 2015
ID:2
-----------------------
把标题为HelloWorld的文章的作者,修改为小雷,只修改AUTHOR1个字段
内置ID:561baace3aea5b925fddc83c
标题:做好社会主义的接班人
内容:好好学习,天天向上
作者:小雷
日期:Mon Oct 12 20:42:54 CST 2015
ID:1
-----------------------
把标题为HelloWorld的文章的作者,修改为小雷,修改了所有的字段
内置ID:561baace3aea5b925fddc83c
标题:null
内容:null
作者:小雷
日期:null
ID:null
-----------------------
查看error信息,发现err字段为空{ "serverUsed" : "localhost/127.0.0.1:27017" , "n" : 1 , "connectionId" : 1 , "err" :  null  , "ok" : 1.0}
删除了刚刚新建的3条记录,剩余count=0

Mongodb总结2-Java版本的HelloWorld-CRUD例子的更多相关文章

  1. core java 1~4(HelloWorld & 标识符|关键字|数据类型 & 表达式|流程控制 & 数组)

    MODULE 1 Java的编译和运行----------------------------编译:javac -d bin src\HelloWorld.java -d:指定编译后的class 文件 ...

  2. Java操作Mongodb 保存/读取java对象到/从mongodb

    从http://central.maven.org/maven2/org/mongodb/mongo-java-driver/选择一个版本进行下载,这里选择的是3.0.0版本,具体下载以下jar包: ...

  3. 4.0.3的mongodb 安装和java使用

    一 整合 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的github项目地址 https://github.com/247292980/spring- ...

  4. EJB2.0版本的HelloWorld

    EJB2.0版本的HelloWorld   虽然EJB3.1已经出来了,可是EJB2.0的项目还需要维护啊.下面写个简单EJB2.0的HelloWorld程序,练练手.   环境: JBoss 4.0 ...

  5. Java版本和功能指南

    您可以使用本指南查找和安装最新的Java,了解Java发行版(AdoptOpenJdk,OpenJDK,OracleJDK等)之间的差异,以及获得Java语言功能的概述,包括Java版本8-13. J ...

  6. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  7. 你的程序支持复杂的时间调度嘛?如约而来的 java 版本

    你的程序支持复杂的时间调度嘛? 这篇文章介绍了时间适配器的c#版本,是给客户端用的,服务器自然也要有一套对应的做法,java版本的 [年][月][日][星期][时间] [*][*][*][*][*] ...

  8. 崔用志-微信开发-java版本

    崔用志-微信开发-java版本 今天看到一些关于微信开发的知识蛮好的博客,分享给大家,希望对大家有帮助. 微信开发准备(一)--Maven仓库管理新建WEB项目 微信开发准备(二)--springmv ...

  9. java版本区别

    java版本区别 点我,点我,Eclipse几个版本号的区别(part1) 点我,点我,Eclipse几个版本号的区别(part2) 点我,点我,Eclipse几个版本号的区别(part3)

  10. javac。java版本切换

    如果安装有多个Java版本时(有时候有些软件自行安装),怎样方便的进行切换呢.除了常见的设置环境变量外,今天学到了一种新的切换方法: update-alternatives --config java ...

随机推荐

  1. Python正则表达式初识(七)

    继续分享Python正则表达式的基础知识,今天给大家分享的特殊字符是“\s”.“\S”,具体的教程如下. 1.“\s”代表的意思是匹配空格,匹配模式“加\s油”代表的是字符“加”和“油”之间有空格的意 ...

  2. ES6学习笔记(三)字符串的扩展

    ES6 加强了对 Unicode 的支持,并且扩展了字符串对象. 1.字符的Unicode表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码 ...

  3. Javascript 模块化理解

    原始时代: script标签引入javascript文件 -------- html ------- <div id="result"></div> < ...

  4. zip-tar

    1.zip 制作压缩文件 (1)格式:zip 压缩文件名 文件1 文件2... zip文件不能用cat查看 (2)选项: -r:用来压缩目录 2.unzip 解压缩文件 (1)格式:unzip 压缩文 ...

  5. JavaScript数组的某些操作(二)

    7.颠倒数组中元素的顺序(注意:不是为数组排序)--reverse方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...

  6. SQL 增删改查(具体)

    一.增:有3种方法 1.使用insert插入单行数据: insert [into] <表名> [列名] values <列值> insert into Strdents (na ...

  7. cocos2d-x的声音控制

    声音控制SimpleAudioEngine是单例.下面是其方法. [cpp] view plaincopy //获得SimpleAudioEngine的实例 static SimpleAudioEng ...

  8. jquery20--animate() : 运动的方法

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  9. js---12对象创建方式,构造器,原型

    <script type="text/javascript"> var o = {}; var o1 = new Object();//这2种方式创建对象是一样的,因为 ...

  10. 用select标签实现跳转

    用select标签实现跳转 一.用select标签实现跳转JavaScript代码 我们经常有遇到需要用select标签跳转到新网页的情况,dw生成的代码太复杂,那么有没有精简的代码得以实现呢?经过仔 ...