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. 【Docker自定制镜像之Dockerfile】

    镜像的定制,就是定制每一层所添加的配置.文件,如果可以把每一层修改.安装.构建.操作的命令都写入到一个脚本中,用脚本来构建.定制镜像,这个脚本就是Dockerfile Dockerfile是一个文本文 ...

  2. CMDB学习之八,完成所有资产采集信息的收集

    #!/usr/bin/env python # -*- coding:utf-8 -*- import traceback from .base import BasePlugin from lib. ...

  3. 紫书 习题 10-22 UVa 10479 (找规律)

    自己一直在纠结这个串的构造方法 而没有观察串本身的规律-- 2的63次方用 unsigned long long 然后可以发现串是递归构造的. 将串分成1,1,2,4,8,16, 然后会发现s串里面1 ...

  4. 用Understand阅读 VS2010项目源码

    一.查看vs2010项目 打开understand,File-New-Project...-Next-Next [向导第三步,选"Import Visual Sudio project fi ...

  5. PHP实现事件机制实例分析

    PHP实现事件机制实例分析 内置了事件机制的语言不多,php也没有提供这种功能.事件(Event)说简单了就是一个Observer模式.实现起来非常easy.可是有所不同的是,事件的监听者谁都能够加, ...

  6. windows下搭建hadoop-2.6.0本地idea开发环境

    概述 本文记录windows下hadoop本地开发环境的搭建: OS:windows hadoop执行模式:独立模式 安装包结构: Hadoop-2.6.0-Windows.zip - cygwinI ...

  7. swift菜鸟入门视频教程-12-21讲

    前段时间录制的swift教程.一直懒就没有发出来,有些教程是在xcode beta2的时候录制的,所以可能如今不太适合了,可是还是会有点帮助,懒了不想写太多的东西了,基本上就是依照官方文档上面的章节做 ...

  8. 关于Maven报错的一些解决办法(别处贴的)

    1.警告:The tag handler class for "s:form"(org.apache.struts2.views.jsp.ui.FormTag) was not f ...

  9. vue --- 全局守卫

    vue2.0 实现导航守卫(路由守卫) 路由跳转前做一些验证,比如登录验证,是网站中的普遍需求. 对此,vue-route 提供的 beforeRouteUpdate 可以方便地实现导航守卫(navi ...

  10. K短路 spfa + A*

    #include <stdio.h> #include <string.h> #include <queue> #include <algorithm> ...