Java驱动程序是MongoDB最早的驱动,已用于生产环境很长时间,十分稳定。可以到MongoDB官方网站下载驱动,驱动版本为2.9.0。

这个jar文件中,有两个包,我们会经常用到com.mongodb 和 com.mongodb.gridfs 。在Java中操作MongoDB,各种概念和shell中类似,几乎所有的方法名也都一致,我们先看个简单的例子吧:

    package cn.test;  

    import java.net.UnknownHostException;  

    import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo; public class Test { public static void main(String[] args) throws UnknownHostException { /**
* Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017.
*/
Mongo connection = new Mongo("localhost:20000");
/**
* DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个
*/
DB db = connection.getDB("mylearndb");
/**
* DBCollection代表集合,如果数据库中没有该集合,会默认创建一个
*/
DBCollection users = db.getCollection("users");
/**
* DBObject代表文档,这是一个接口,java中提供了多种实现,最简单的就是BasicDBObject了
*/
DBObject user = new BasicDBObject();
user.put("name", "jimmy");
user.put("age", "34");
DBObject address = new BasicDBObject();
address.put("city", "bj");
address.put("street", "bq road");
address.put("mail", "ufpark 68#");
/**
* 对于内嵌文档,我们需要先将内嵌文档填充后,再填充到外层文档中!
*/
user.put("address", address);
// 将该文档插入到集合中
users.insert(user);
// 从集合中查询数据,我们就查询一条,调用findOne即可
DBObject dbUser = users.findOne();
System.out.println("name" + " : " + dbUser.get("name") );
System.out.println("age" + " : " + dbUser.get("age") );
DBObject dbAddress = (DBObject)user.get("address");
System.out.println("city" + " : " + dbAddress.get("city") );
System.out.println("street" + " : " + dbAddress.get("street") );
System.out.println("mail" + " : " + dbAddress.get("mail") ); } }

输出结果为:

    name : jimmy
age : 34
city : bj
street : bq road
mail : ufpark 68#

从上述例子,我们可以看出,利用Java驱动操作MongoDB和shell中操作方式是十分相似的。

我们这里稍微提一下上面注释中,解释的文档类。Java驱动中文档必须是DBObject接口类型,这个接口可以认为是一个有序地java.util.Map。Java驱动中有提供了很多实现,我们上例中采用了最简单的BasicDBObject。

【向集合中保存数组】

MongoDB集合中的键值对的值支持数组,在shell中,我们通过[],来表示数组,那Java驱动中如何表示数组呢?在Java驱动中,java.util.List类型的对象,都可以表示MongoDB中的数组!我们看一个例子:

     package cn.test;  

     import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List; import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo; public class Test1 { public static void main(String[] args) throws UnknownHostException { /**
* Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017.
*/
Mongo connection = new Mongo("localhost:20000");
/**
* DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个
*/
DB db = connection.getDB("mylearndb");
/**
* DBCollection代表集合,如果数据库中没有该集合,会默认创建一个
*/
DBCollection fruitShop = db.getCollection("fruitshop");
/**
* 创建水果店文档对象
*/
DBObject shop1 = new BasicDBObject();
shop1.put("name", "The Fruit King");
/**
* 水果店内水果保存在一个内嵌文档的数组中,格式为:
* [{"name" : "apple", "quality" : "good", "price" : "5.6"},
* {"name" : "orange", "quality" : "normal", "price" : "1.5"},
* ......]
*/
// 数组通过List表示
List<DBObject> fruits = new ArrayList<DBObject>();
// 数组中的每一个文档,我们通过BasicDBObjectBuilder来构造
fruits.add(BasicDBObjectBuilder.start().add("name", "apple").add("quality", "good").add("price", "5.6").get());
fruits.add(BasicDBObjectBuilder.start().add("name", "orange").add("quality", "normal").add("price", "1.5").get());
shop1.put("fruits", fruits); fruitShop.insert(shop1); } }

我们通过Shell连接到数据库上,直观地看看数据库中集合内的数据:

     > use mylearndb;
switched to db mylearndb
> db.fruitshop.find();
{ "_id" : ObjectId("504c26fed9005e6e410c5979"), "name" : "The Fruit King", "frui
ts" : [ { "name" : "apple", "quality" : "good", "price"
: "5.6" }, { "name" : "orange", "quality" : "normal", "price"
: "1.5" } ] }
>

以上就是利用Java驱动操作MongoDB的一个简单示例,使用Java驱动操作MongoDB很简单,大家实际使用中对于API可以参照MongoDB提供的官方文档。

下面的链接就是2.9.0版驱动对应的API文档:

http://api.mongodb.org/java/2.9.0/

参考链接:

JAVA单例MongoDB工具类

最新文章

  1. 新冲刺Sprint3(第六天)
  2. python学习笔记:Day02
  3. IEnumerable 和 IEnumerator
  4. java 字节数组转int
  5. C#设计模式(9)——装饰者模式(Decorator Pattern)
  6. ping: sendto: Network is unreachable
  7. SpringMVC中@ResourceMapping的基本用法
  8. 通过CSS禁止Chrome自动为输入框添加橘黄色边框,修改/禁止 chrome input边框颜色,
  9. Oracle 数据库基本操作——实用手册、表操作、事务操作、序列
  10. Ext.Net 使用总结之GridPanel的删除事件
  11. C#隐藏tabcontrol
  12. 【View层】界面绘制
  13. 201521123111 《Java程序设计》第1周学习总结
  14. 利用IIS部署WEB网站以及解决CSS/JS不能显示问题
  15. CMD命令启动和关闭SQL服务
  16. upc组队赛1 过分的谜题【找规律】
  17. 关于nodejs中的async/await
  18. kepware http接口 php
  19. cache-fusion笔记
  20. Spark记录-Scala数组/List/Map/Set

热门文章

  1. 洛谷 P3071 [USACO13JAN]座位Seating-线段树区间合并(判断找,只需要最大前缀和最大后缀)+分治+贪心
  2. poj-3268最短路
  3. Python 中的语句
  4. 移动端h5下ul实现横向滚动css代码
  5. python修改文件的属性
  6. Fiddler手机抓包,相关细节回顾
  7. Python发送带附件的邮件
  8. hdu 5316 Magician(2015多校第三场第1题)线段树单点更新+区间合并
  9. python日常碎碎念
  10. 自动化运维工具 ~puppet~