Mongodb总结2-Java版本的HelloWorld-CRUD例子
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例子的更多相关文章
- core java 1~4(HelloWorld & 标识符|关键字|数据类型 & 表达式|流程控制 & 数组)
MODULE 1 Java的编译和运行----------------------------编译:javac -d bin src\HelloWorld.java -d:指定编译后的class 文件 ...
- Java操作Mongodb 保存/读取java对象到/从mongodb
从http://central.maven.org/maven2/org/mongodb/mongo-java-driver/选择一个版本进行下载,这里选择的是3.0.0版本,具体下载以下jar包: ...
- 4.0.3的mongodb 安装和java使用
一 整合 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的github项目地址 https://github.com/247292980/spring- ...
- EJB2.0版本的HelloWorld
EJB2.0版本的HelloWorld 虽然EJB3.1已经出来了,可是EJB2.0的项目还需要维护啊.下面写个简单EJB2.0的HelloWorld程序,练练手. 环境: JBoss 4.0 ...
- Java版本和功能指南
您可以使用本指南查找和安装最新的Java,了解Java发行版(AdoptOpenJdk,OpenJDK,OracleJDK等)之间的差异,以及获得Java语言功能的概述,包括Java版本8-13. J ...
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- 你的程序支持复杂的时间调度嘛?如约而来的 java 版本
你的程序支持复杂的时间调度嘛? 这篇文章介绍了时间适配器的c#版本,是给客户端用的,服务器自然也要有一套对应的做法,java版本的 [年][月][日][星期][时间] [*][*][*][*][*] ...
- 崔用志-微信开发-java版本
崔用志-微信开发-java版本 今天看到一些关于微信开发的知识蛮好的博客,分享给大家,希望对大家有帮助. 微信开发准备(一)--Maven仓库管理新建WEB项目 微信开发准备(二)--springmv ...
- java版本区别
java版本区别 点我,点我,Eclipse几个版本号的区别(part1) 点我,点我,Eclipse几个版本号的区别(part2) 点我,点我,Eclipse几个版本号的区别(part3)
- javac。java版本切换
如果安装有多个Java版本时(有时候有些软件自行安装),怎样方便的进行切换呢.除了常见的设置环境变量外,今天学到了一种新的切换方法: update-alternatives --config java ...
随机推荐
- Python正则表达式初识(七)
继续分享Python正则表达式的基础知识,今天给大家分享的特殊字符是“\s”.“\S”,具体的教程如下. 1.“\s”代表的意思是匹配空格,匹配模式“加\s油”代表的是字符“加”和“油”之间有空格的意 ...
- ES6学习笔记(三)字符串的扩展
ES6 加强了对 Unicode 的支持,并且扩展了字符串对象. 1.字符的Unicode表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码 ...
- Javascript 模块化理解
原始时代: script标签引入javascript文件 -------- html ------- <div id="result"></div> < ...
- zip-tar
1.zip 制作压缩文件 (1)格式:zip 压缩文件名 文件1 文件2... zip文件不能用cat查看 (2)选项: -r:用来压缩目录 2.unzip 解压缩文件 (1)格式:unzip 压缩文 ...
- JavaScript数组的某些操作(二)
7.颠倒数组中元素的顺序(注意:不是为数组排序)--reverse方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- SQL 增删改查(具体)
一.增:有3种方法 1.使用insert插入单行数据: insert [into] <表名> [列名] values <列值> insert into Strdents (na ...
- cocos2d-x的声音控制
声音控制SimpleAudioEngine是单例.下面是其方法. [cpp] view plaincopy //获得SimpleAudioEngine的实例 static SimpleAudioEng ...
- jquery20--animate() : 运动的方法
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- js---12对象创建方式,构造器,原型
<script type="text/javascript"> var o = {}; var o1 = new Object();//这2种方式创建对象是一样的,因为 ...
- 用select标签实现跳转
用select标签实现跳转 一.用select标签实现跳转JavaScript代码 我们经常有遇到需要用select标签跳转到新网页的情况,dw生成的代码太复杂,那么有没有精简的代码得以实现呢?经过仔 ...