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. Python环境搭建—安利Python小白的Python安装详细教程

    人生苦短,我用Python.众所周知,Python目前越来越火,学习Python的小伙伴也越来越多.最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了 ...

  2. Felx之HTTPService

    获取并显示数据 为了向我们的程序提供数据,Adobe Flex包含特别为与HTTP服务器,网络服务或者是远程对象服务(Java对象)进行交互的而设计的组件.这些组件被称之为远程过程调用(RPC)服务组 ...

  3. RQNOJ PID496/[IOI1999]花店橱窗布置

    PID496 / [IOI1999]花店橱窗布置 ☆   题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序 编号 ...

  4. Java 学习(13):抽象类& 抽象方法& 封装

    目录 --- 抽象类 --- 封装 抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的 ...

  5. EBS OAF开发中实体对象和视图对象的属性设置器

    EBS OAF开发中实体对象和视图对象的属性设置器 (版权声明.本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 源文: Home > Oracle ...

  6. hdu5372 Segment Game

    Problem Description Lillian is a clever girl so that she has lots of fans and often receives gifts f ...

  7. 关于ajax访问express服务器的跨域问题

    在学习es6的时候用promise封装了一个ajax <script type="text/javascript"> function getNews(URL) { l ...

  8. js对数组进行操作

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  9. 51.cgi网站后门

    运行截图: html开发: <html> <body> <form id="form" name="form" method=&q ...

  10. IIS文件上传大小修改配置说明

    原因:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大小时30M). 解决:IIS7更改asp.net文件上传大小限制 步骤如下: 1.    修改I ...