java操作mongodb_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java操作mongodb

java操作mongodb

 2014/4/23 21:42:09  ddlgyq  程序员俱乐部  我要评论(0)
  • 摘要:上一篇文章:http://blog.csdn.net/wangpeng047/article/details/7705588介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过前一篇文章我们对MongoDB有了全面的认识和理解。现在我们就用Java来操作MongoDB的数据。开发环境:System:WindowsIDE:eclipse、MyEclipse8Database:mongoDB开发依赖库:JavaEE5、mongo-2.5.3.jar、junit-4.8.2
  • 标签:Java 操作 MongoDB

上一篇文章: http://blog.csdn.net/wangpeng047/article/details/7705588介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过前一篇文章我们对MongoDB有了全面的认识和理解。现在我们就用Java来操作MongoDB的数据。

?

开发环境:

System:Windows

IDE:eclipse、MyEclipse 8

Database:mongoDB

开发依赖库:

JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar

Email:hoojo_@126.com

Blog:http://blog.csdn.net/IBM_hoojo

http://hoojo.cnblogs.com/

一、准备工作

1、 首先,下载mongoDB对Java支持的驱动包

驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads

mongoDB对Java的相关支持、技术:http://www.mongodb.org/display/DOCS/Java+Language+Center

驱动源码下载:https://download.github.com/mongodb-mongo-java-driver-r2.6.1-7-g6037357.zip

在线查看源码:https://github.com/mongodb/mongo-java-driver

2、 下面建立一个JavaProject工程,导入下载下来的驱动包。即可在Java中使用mongoDB,目录如下:

二、Java操作MongoDB示例

在本示例之前你需要启动mongod.exe的服务,启动后,下面的程序才能顺利执行;

1、 建立SimpleTest.java,完成简单的mongoDB数据库操作

[java] view plaincopy ?
    class="dp-j">
  1. Mongo?mongo?=?new?Mongo();???

这样就创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017。

[java] view plaincopy ?
  1. DB?db?=?mongo.getDB(“test”);???

这样就获得了一个test的数据库,如果mongoDB中没有创建这个数据库也是可以正常运行的。如果你读过上一篇文章就知道,mongoDB可以在没有创建这个数据库的情况下,完成数据的添加操作。当添加的时候,没有这个库,mongoDB会自动创建当前数据库。

得到了db,下一步我们要获取一个“聚集集合DBCollection”,通过db对象的getCollection方法来完成。

[java] view plaincopy ?
  1. DBCollection?users?=?db.getCollection("users");???

这样就获得了一个DBCollection,它相当于我们数据库的“表”。

查询所有数据

[java] view plaincopy ?
  1. DBCursor?cur?=?users.find();??
  2. while?(cur.hasNext())?{??
  3. ???System.out.println(cur.next());??
  4. }???

完整源码

[java] view plaincopy ?
  1. package?com.hoo.test;??
  2. ???
  3. import?java.net.UnknownHostException;??
  4. import?com.mongodb.DB;??
  5. import?com.mongodb.DBCollection;??
  6. import?com.mongodb.DBCursor;??
  7. import?com.mongodb.Mongo;??
  8. import?com.mongodb.MongoException;??
  9. import?com.mongodb.util.JSON;??
  10. ??
  11. public?class?SimpleTest?{??
  12. ???
  13. ????public?static?void?main(String[]?args)?throws?UnknownHostException,?MongoException?{??
  14. ????????Mongo?mg?=?new?Mongo();??
  15. ????????//查询所有的Database??
  16. ????????for?(String?name?:?mg.getDatabaseNames())?{??
  17. ????????????System.out.println("dbName:?"?+?name);??
  18. ????????}??
  19. ??????????
  20. ????????DB?db?=?mg.getDB("test");??
  21. ????????//查询所有的聚集集合??
  22. ????????for?(String?name?:?db.getCollectionNames())?{??
  23. ????????????System.out.println("collectionName:?"?+?name);??
  24. ????????}??
  25. ??????????
  26. ????????DBCollection?users?=?db.getCollection("users");??
  27. ??????????
  28. ????????//查询所有的数据??
  29. ????????DBCursor?cur?=?users.find();??
  30. ????????while?(cur.hasNext())?{??
  31. ????????????System.out.println(cur.next());??
  32. ????????}??
  33. ????????System.out.println(cur.count());??
  34. ????????System.out.println(cur.getCursorId());??
  35. ????????System.out.println(JSON.serialize(cur));??
  36. ????}??
  37. }??

2、 完成CRUD操作,首先建立一个MongoDB4CRUDTest.java,基本测试代码如下:

[java] view plaincopy ?
  1. package?com.hoo.test;??
  2. ???
  3. import?java.net.UnknownHostException;??
  4. import?java.util.ArrayList;??
  5. import?java.util.List;??
  6. import?org.bson.types.ObjectId;??
  7. import?org.junit.After;??
  8. import?org.junit.Before;??
  9. import?org.junit.Test;??
  10. import?com.mongodb.BasicDBObject;??
  11. import?com.mongodb.Bytes;??
  12. import?com.mongodb.DB;??
  13. import?com.mongodb.DBCollection;??
  14. import?com.mongodb.DBCursor;??
  15. import?com.mongodb.DBObject;??
  16. import?com.mongodb.Mongo;??
  17. import?com.mongodb.MongoException;??
  18. import?com.mongodb.QueryOperators;??
  19. import?com.mongodb.util.JSON;??
  20. ??
  21. public?class?MongoDB4CRUDTest?{??
  22. ??????
  23. ????private?Mongo?mg?=?null;??
  24. ????private?DB?db;??
  25. ????private?DBCollection?users;??
  26. ??????
  27. ????@Before??
  28. ????public?void?init()?{??
  29. ????????try?{??
  30. ????????????mg?=?new?Mongo();??
  31. ????????????//mg?=?new?Mongo("localhost",?27017);??
  32. ????????}?catch?(UnknownHostException?e)?{??
  33. ????????????e.printStackTrace();??
  34. ????????}?catch?(MongoException?e)?{??
  35. ????????????e.printStackTrace();??
  36. ????????}??
  37. ????????//获取temp?DB;如果默认没有创建,mongodb会自动创建??
  38. ????????db?=?mg.getDB("temp");??
  39. ????????//获取users?DBCollection;如果默认没有创建,mongodb会自动创建??
  40. ????????users?=?db.getCollection("users");??
  41. ????}??
  42. ??????
  43. ????@After??
  44. ????public?void?destory()?{??
  45. ????????if?(mg?!=?null)??
  46. ????????????mg.close();??
  47. ????????mg?=?null;??
  48. ????????db?=?null;??
  49. ????????users?=?null;??
  50. ????????System.gc();??
  51. ????}??
  52. ??????
  53. ????public?void?print(Object?o)?{??
  54. ????????System.out.println(o);??
  55. ????}??
  56. }??

3、 添加操作

在添加操作之前,我们需要写个查询方法,来查询所有的数据。代码如下:

[java] view plaincopy ?
  1. /**?
  2. ?*?查询所有数据?
  3. */??
  4. private?void?queryAll()?{??
  5. ????print("查询users的所有数据:");??
  6. ????//db游标??
  7. ????DBCursor?cur?=?users.find();??
  8. ????while?(cur.hasNext())?{??
  9. ????????print(cur.next());??
  10. ????}??
  11. }??
  12. ???
  13. @Test??
  14. public?void?add()?{??
  15. ????//先查询所有数据??
  16. ????queryAll();??
  17. ????print("count:?"?+?users.count());??
  18. ??????
  19. ????DBObject?user?=?new?BasicDBObject();??
  20. ????user.put("name",?"hoojo");??
  21. ????user.put("age",?24);??
  22. ????//users.save(user)保存,getN()获取影响行数??
  23. ????//print(users.save(user).getN());??
  24. ??????
  25. ????//扩展字段,随意添加字段,不影响现有数据??
  26. ????user.put("sex",?"男");??
  27. ????print(users.save(user).getN());??
  28. ??????
  29. ????//添加多条数据,传递Array对象??
  30. ????print(users.insert(user,?new?BasicDBObject("name",?"tom")).getN());??
  31. ??????
  32. ????//添加List集合??
  33. ????List<DBObject>?list?=?new?ArrayList<DBObject>();??
  34. ????list.add(user);??
  35. ????DBObject?user2?=?new?BasicDBObject("name",?"lucy");??
  36. ????user.put("age",?22);??
  37. ????list.add(user2);??
  38. ????//添加List集合??
  39. ????print(users.insert(list).getN());??
  40. ??????
  41. ????//查询下数据,看看是否添加成功??
  42. ????print("count:?"?+?users.count());??
  43. ????queryAll();??
  44. }??

?4、 删除数据

[java] view plaincopy ?
  1. @Test??
  2. public?void?remove()?{??
  3. ????queryAll();??
  4. ????print("删除id?=?4de73f7acd812d61b4626a77:"?+?users.remove(new?BasicDBObject("_id",?new?ObjectId("4de73f7acd812d61b4626a77"))).getN());??
  5. ????print("remove?age?>=?24:?"?+?users.remove(new?BasicDBObject("age",?new?BasicDBObject("$gte",?24))).getN());??
  6. }??

5、 修改数据

[java] view plaincopy ?
  1. @Test??
  2. public?void?modify()?{??
  3. ????print("修改:"?+?users.update(new?BasicDBObject("_id",?new?ObjectId("4dde25d06be7c53ffbd70906")),?new?BasicDBObject("age",?99)).getN());??
  4. ????print("修改:"?+?users.update(??
  5. ????????????new?BasicDBObject("_id",?new?ObjectId("4dde2b06feb038463ff09042")),???
  6. ????????????new?BasicDBObject("age",?121),??
  7. ????????????true,//如果数据库不存在,是否添加??
  8. ????????????false//多条修改??
  9. ????????????).getN());??
  10. ????print("修改:"?+?users.update(??
  11. ????????????new?BasicDBObject("name",?"haha"),???
  12. ????????????new?BasicDBObject("name",?"dingding"),??
  13. ????????????true,//如果数据库不存在,是否添加??
  14. ????????????true//false只修改第一天,true如果有多条就不修改??
  15. ????????????).getN());??
  16. ??????
  17. ????//当数据库不存在就不修改、不添加数据,当多条数据就不修改??
  18. ????//print(" 修改多 条:"?+?coll.updateMulti(new?BasicDBObject("_id",?new?ObjectId("4dde23616be7c19df07db42c")),?new?BasicDBObject("name",?"199")));??
  19. }??

6、 查询数据

[java] view plaincopy ?
  1. @Test??
  2. public?void?query()?{??
  3. ????//查询所有??
  4. ????//queryAll();??
  5. ??????
  6. ????//查询id?=?4de73f7acd812d61b4626a77??
  7. ????print("find?id?=?4de73f7acd812d61b4626a77:?"?+?users.find(new?BasicDBObject("_id",?new?ObjectId("4de73f7acd812d61b4626a77"))).toArray());??
  8. ??????
  9. ????//查询age?=?24??
  10. ????print("find?age?=?24:?"?+?users.find(new?BasicDBObject("age",?24)).toArray());??
  11. ??????
  12. ????//查询age?>=?24??
  13. ????print("find?age?>=?24:?"?+?users.find(new?BasicDBObject("age",?new?BasicDBObject("$gte",?24))).toArray());??
  14. ????print("find?age?<=?24:?"?+?users.find(new?BasicDBObject("age",?new?BasicDBObject("$lte",?24))).toArray());??
  15. ??????
  16. ????print("查询age!=25:"?+?users.find(new?BasicDBObject("age",?new?BasicDBObject("$ne",?25))).toArray());??
  17. ????print("查询age?in?25/26/27:"?+?users.find(new?BasicDBObject("age",?new?BasicDBObject(QueryOperators.IN,?new?int[]?{?25,?26,?27?}))).toArray());??
  18. ????print("查询age?not?in?25/26/27:"?+?users.find(new?BasicDBObject("age",?new?BasicDBObject(QueryOperators.NIN,?new?int[]?{?25,?26,?27?}))).toArray());??
  19. ????print("查询age?exists?排序:"?+?users.find(new?BasicDBObject("age",?new?BasicDBObject(QueryOperators.EXISTS,?true))).toArray());??
  20. ??????
  21. ????print("只查询age属性:"?+?users.find(null,?new?BasicDBObject("age",?true)).toArray());??
  22. ????print("只查属性:"?+?users.find(null,?new?BasicDBObject("age",?true),?0,?2).toArray());??
  23. ????print("只查属性:"?+?users.find(null,?new?BasicDBObject("age",?true),?0,?2,?Bytes.QUERYOPTION_NOTIMEOUT).toArray());??
  24. ??????
  25. ????//只查询一条数据,多条去第一条??
  26. ????print("findOne:?"?+?users.findOne());??
  27. ????print("findOne:?"?+?users.findOne(new?BasicDBObject("age",?26)));??
  28. ????print("findOne:?"?+?users.findOne(new?BasicDBObject("age",?26),?new?BasicDBObject("name",?true)));??
  29. ??????
  30. ????//查询修改、删除??
  31. ????print("findAndRemove?查询age=25的数据,并且删除:?"?+?users.findAndRemove(new?BasicDBObject("age",?25)));??
  32. ??????
  33. ????//查询age=26的数据,并且修改name的值为Abc??
  34. ????print("findAndModify:?"?+?users.findAndModify(new?BasicDBObject("age",?26),?new?BasicDBObject("name",?"Abc")));??
  35. ????print("findAndModify:?"?+?users.findAndModify(??
  36. ????????new?BasicDBObject("age",?28),?//查询age=28的数据??
  37. ????????new?BasicDBObject("name",?true),?//查询name属性??
  38. ????????new?BasicDBObject("age",?true),?//按照age排序??
  39. ????????false,?//是否删除,true表示删除??
  40. ????????new?BasicDBObject("name",?"Abc"),?//修改的值,将name修改成Abc??
  41. ????????true,???
  42. ????????true));??
  43. ??????
  44. ????queryAll();??
  45. }??

mongoDB不支持联合查询、子查询,这需要我们自己在程序中完成。将查询的结果集在Java查询中进行需要的过滤即可。

7、 其他操作

[java] view plaincopy ?
  1. public?void?testOthers()?{??
  2. ????DBObject?user?=?new?BasicDBObject();??
  3. ????user.put("name",?"hoojo");??
  4. ????user.put("age",?24);??
  5. ??????
  6. ????//JSON?对象转换??????????
  7. ????print("serialize:?"?+?JSON.serialize(user));??
  8. ????//反序列化??
  9. ????print("parse:?"?+?JSON.parse("{?\"name\"?:?\"hoojo\"?,?\"age\"?:?24}"));??
  10. ??????
  11. ????print("判断temp?Collection是否存在:?"?+?db.collectionExists("temp"));??
  12. ??????
  13. ????//如果不存在就创建??
  14. ????if?(!db.collectionExists("temp"))?{??
  15. ????????DBObject?options?=?new?BasicDBObject();??
  16. ????????options.put("size",?20);??
  17. ????????options.put("capped",?20);??
  18. ????????options.put("max",?20);??
  19. ????????print(db.createCollection("account",?options));??
  20. ????}??
  21. ??????
  22. ????//设置db为只读??
  23. ????db.setReadOnly(true);??
  24. ??????
  25. ????//只读不能写入数据??
  26. ????db.getCollection("test").save(user);??
  27. }??

好了,这里基本上就介绍这么多Java操作MongoDB的方法。其他的东西还需要你自己多多研究。上面操作MongoDB的方法都是一些常用的方法,比较简单。如果有什么问题,欢迎随时和我联系,一起交流沟通。

发表评论
用户名: 匿名