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

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

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

package mongodb;

import java.net.UnknownHostException;
import java.util.Date; import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.CommandResult;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.WriteResult; /**
* MongoDB-CRUD Demo。
*
*
*/
public class MongoDBDemo {
// /////////////数据库地址常量/////////////////////
/**
* 数据库地址
*/
public static final String DEFAULT_HOST = "localhost";// localhost
/**
* 端口号
*/
public static final int DEFAULT_PORT = 27017;
// //////////////数据库名称和集合常量/////////////////
/**
* 数据库名称
*/
public static final String DB_BLOG = "blog";
/**
* 集合名称
*/
public static final String DB_BLOG_COLLECTION = "article"; // /////////////文章Article的属性名称常量/////////////////////
/**
* 标题
*/
public static final String TITLE = "title";
/**
* 内容
*/
public static final String CONTENT = "content";
/**
* 作者
*/
public static final String AUTHOR = "author";
/**
* 日期
*/
public static final String DATE = "date";
public static final String ID = "id"; public static void main(String[] args) throws UnknownHostException { Mongo mogo = new Mongo(DEFAULT_HOST, DEFAULT_PORT);
// 获得数据库
DB blogDb = mogo.getDB(DB_BLOG);
DBCollection articleCollection = blogDb
.getCollection(DB_BLOG_COLLECTION); buildThreeArticles(articleCollection); // 查找并打印作者为"FansUnion"的文章
BasicDBObject searchArticleByAuthor = new BasicDBObject();
searchArticleByAuthor.append(AUTHOR, "FansUnion"); demoFindByField(articleCollection, searchArticleByAuthor);
demoFindAndSort(articleCollection, searchArticleByAuthor); BasicDBObject searchArticleById = new BasicDBObject();
searchArticleById.append(ID, 3L);
demoFindById(articleCollection, searchArticleById); demoFindSpecialField(articleCollection, searchArticleById); demoFindWithIn(articleCollection); demoUpdateWithTwoWay(articleCollection, searchArticleByAuthor); demoRemove(articleCollection);
// 集合中的文档数量
long count = articleCollection.count();
println("删除了刚刚新建的3条记录,剩余count=" + count); // 关闭连接
mogo.close();
} //删除数据
private static void demoRemove(DBCollection articleCollection) {
// 删除
BasicDBObject removeCondition = new BasicDBObject();
removeCondition.append(AUTHOR, "FansUnion");
articleCollection.remove(removeCondition); BasicDBObject removeCondition2 = new BasicDBObject();
removeCondition.append(TITLE, "HelloWorld");
// 删除,并查看是否有报错
WriteResult writeResult = articleCollection.remove(removeCondition2);
CommandResult commandResult = writeResult.getLastError();
println("查看error信息,发现err字段为空" + commandResult.toString()); BasicDBObject removeAll = new BasicDBObject();
articleCollection.remove(removeAll);
} //2种方式更新对象
private static void demoUpdateWithTwoWay(DBCollection articleCollection,
BasicDBObject searchArticleByAuthor) {
// 把标题为"HelloWorld"的文章的作者,修改为“小雷”
println("把标题为HelloWorld的文章的作者,修改为小雷,只修改AUTHOR1个字段");
// 查询条件:标题为"HelloWorld"
BasicDBObject updateCondition = new BasicDBObject();
searchArticleByAuthor.append(TITLE, "HelloWorld"); BasicDBObject newHelloWorldArticle = new BasicDBObject();
newHelloWorldArticle.append(AUTHOR, "小雷"); // 第1种方式-修改,只修改指定的字段("$set","$inc"都是修改器)
// update Article set author="小雷" where title='HelloWorld'
DBObject updateSetValue = new BasicDBObject("$set",
newHelloWorldArticle);
articleCollection.update(updateCondition, updateSetValue);
// 打印第1次修改过的"HelloWorld"文章
DBObject helloWordlArticle2 = articleCollection
.findOne(updateCondition);
print(helloWordlArticle2); // 第2种方式-修改
// update Article set author="小雷",title=null,content=null,date=null
// where title='HelloWorld'
println("把标题为HelloWorld的文章的作者,修改为小雷,修改了所有的字段");
articleCollection.update(updateCondition, newHelloWorldArticle);
DBObject helloWordlArticle = articleCollection.findOne(updateCondition);
// 打印第2次修改过的"HelloWorld"文章
print(helloWordlArticle);
} //Mongodb中的in语句
private static void demoFindWithIn(DBCollection articleCollection) {
// IN查询
println("查找并打印ID为1和2的文章");
// List list = Arrays.asList(1,2);
// Long[] array= new Long[]{1L,2L}; BasicDBList values = new BasicDBList();
values.add(1);
values.add(2); DBObject inQuery = new BasicDBObject("$in", values); DBObject con = new BasicDBObject();
con.put(ID, inQuery);
DBCursor cursorIdArray = articleCollection.find(con);
println("个数:" + cursorIdArray.count());
while (cursorIdArray.hasNext()) {
print(cursorIdArray.next());
}
} //查询特定的字段
private static void demoFindSpecialField(DBCollection articleCollection,
BasicDBObject searchArticleById) {
println("查找并打印ID为3的文章2,只查询TITLE字段");
BasicDBObject b = new BasicDBObject();
b.append(TITLE, 1);
DBCursor cursor3 = articleCollection.find(searchArticleById, b);
println("个数:" + cursor3.count());
while (cursor3.hasNext()) {
print(cursor3.next());
}
// cursor3.close();//在没有这行代码的情况下,同样的程序,出现了1次,个数为4,仔细看,发现他们的内置ID不一样
// 可能是上一次执行的删除,还没有完成?
//这个地方是一个疑问,但是复现不了
} //根据ID查找对象
private static BasicDBObject demoFindById(DBCollection articleCollection,
BasicDBObject searchArticleById) {
// 查找并打印ID为3的文章
println("查找并打印ID为3的文章"); DBCursor cursor2 = articleCollection.find(searchArticleById);
println("个数:" + cursor2.count());
while (cursor2.hasNext()) {
print(cursor2.next());
}
cursor2.close();
return searchArticleById;
} //查找对象,并排序
private static void demoFindAndSort(DBCollection articleCollection,
BasicDBObject searchArticleByAuthor) {
// 查找并打印作者为"FansUnion"的文章,按照ID降序排列
println("查找并打印作者为FansUnion的文章,降序排列,查询出来的ID一次为3,2,1");
BasicDBObject orderByIdDesc = new BasicDBObject();
orderByIdDesc.append(ID, -1);
DBCursor cursorIdDesc = articleCollection.find(searchArticleByAuthor)
.sort(orderByIdDesc);
while (cursorIdDesc.hasNext()) {
print(cursorIdDesc.next());
}
} //根据字段查找对象
private static void demoFindByField(DBCollection articleCollection,
BasicDBObject searchArticleByAuthor) {
println("查找并打印作者为FansUnion的文章,查询出来的ID一次为1,2,3");
DBCursor cursor = articleCollection.find(searchArticleByAuthor);
while (cursor.hasNext()) {
print(cursor.next());
}
cursor.close();// 网上和书中的的例子,没有关闭游标,官方JDK文档“kills the current cursor on
// the server.”
} // 构造3个文章,插入的ID顺序是1,2,3
private static void buildThreeArticles(DBCollection articleCollection) { BasicDBObject article = buildArticle("做好社会主义的接班人", "好好学习,天天向上",
"FansUnion", new Date(), 1L);
BasicDBObject article2 = buildArticle("做好资本主义的掘墓人", "拼命干活,时时向上",
"FansUnion", new Date(), 2L);
BasicDBObject article3 = buildArticle("HelloWorld",
"I am a MongoDb demo.", "FansUnion", new Date(), 3L);
// 增加若干文章
articleCollection.insert(article);
articleCollection.insert(article2);
articleCollection.insert(article3); println("插入文章的个数:" + articleCollection.count());
} // 打印对象
private static void print(DBObject article) {
// println("-----------------------");
println("内置ID:" + article.get("_id"));
println("标题:" + article.get(TITLE));
println("内容:" + article.get(CONTENT));
println("作者:" + article.get(AUTHOR));
println("日期:" + article.get(DATE));
println("ID:" + article.get(ID));
println("-----------------------");
} private static void println(Object object) {
System.out.println(object);
} /**
* 构造1个文章对象
*
* @param title
* 标题
* @param content
* 内容
* @param author
* 作者
* @param date
* 日期
* @return 文章对象
*/
private static BasicDBObject buildArticle(String title, String content,
String author, Date date, Long id) {
BasicDBObject article = new BasicDBObject();
article.append(TITLE, title);
article.append(CONTENT, content);
article.append(AUTHOR, author);
article.append(DATE, date);
article.append(ID, id);
return article;
}
}

代码执行结果

插入文章的个数: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. C/C++(C++内存管理,内联函数,类型转换,命名空间,string类)

    ---恢复内容开始--- 内存管理 new/delete C语言中提供了 malloc 和 free 两个系统函数,#include "stdlib.h"库函数,完成对堆内存的申请 ...

  2. 【Linux下tar命令详解】

    tar命令用于建立.还原备份文件,它可以加入.解开备份文件内的文件. 参数 带有*号的为常用的参数 . -A 新增压缩文件到已存在的压缩包 . -c 建立新的压缩文件* . -d 记录文件的差别 . ...

  3. 2018 NOIP备战计划

    2018 NOIP目标 (1)刷完紫书数论习题 (2)听51nod讲座和习题,根据其知识结构来备战. (3)刷完紫书动规 (4)初赛前两个星期左右开始复习 刷紫书动规的时候感觉偏难,进步缓慢.应该自己 ...

  4. bzoj1084【SCOI2005】最大子矩阵

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1946  Solved: 970 [Submit][id ...

  5. [Python] Understand List Comprehensions in Python

    List comprehensions provide a concise way to create new lists, where each item is the result of an o ...

  6. java之 ------ 几种常见的简单设计模式

    前言: 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.用于解决特定环境下.反复出现的特定问题的解决方式.使用设计模式是为了可重用代码.让代 ...

  7. 【LeetCode-面试算法经典-Java实现】【008-String to Integer (atoi) (字符串转成整数)】

    [008-String to Integer (atoi) (字符串转成整数)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Implement atoi to co ...

  8. Android圆形图片不求人,自定义View实现(BitmapShader使用)

    在很多APP当中,圆形的图片是必不可少的元素,美观大方.本文将带领读者去实现一个圆形图片自定View,力求只用一个Java类来完成这件事情. 一.先上效果图 二.实现思路 在定义View 的onMea ...

  9. 运动识别之HOJ3D和HMM

    http://cvrc.ece.utexas.edu/Publications/Xia_HAU3D12.pdf   View Invariant Human Action Recognition Us ...

  10. 多重背包模板 51Nod 1086

    有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...