MongoDB Java Driver 简单操作
 
一、Java驱动一致性

MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个)。
 
 对于有大量写和读的环境中,为了确保在一个Session中使用同一个DB时,我们可以用以下方式保证一致性:
 
 DB mdb = mongo.getDB('dbname');
 
 mdb.requestStart();
 //
 // 业务代码
 //
 mdb.requestDone();

DB和DBCollection是绝对线程安全的,它们被缓存起来了,所以在应用中取到的可能是同一个对象。

二、保存/查找对象(DBObject)

Java驱动提供了DBObject接口,方便我们保存对象到数据库中。
 
 定义需要保存的对象:
 
 public class Tweet implements DBObject {
  /** ...... */
 }
 
 然后我们可以使用该对象:
 
 Tweet tweet = new Tweet();
 tweet.put("user", userId);
 tweet.put("message", message);
 tweet.put("date", new Date());
 
 collection.insert(tweet);
 
 当从数据库中查询时,结果会自动的转换成DBObject对象,我们可以转换成我们自己的类型:
 
 collection.setObjectClass(Tweet);
 
 Tweet myTweet = (Tweet)collection.findOne();

三、创建连接

Mongo m = new Mongo();
 Mongo m = new Mongo("localhost");
 Mongo m = new Mongo("localhost", 27017);
 
 DB db = m.getDB("mydb);
 
 注意:事实上,Mongo实例代表了一个数据库连接池,即使在多线程的环境中,一个Mongo实例对我们来说已经足够了。
 
四、认证(可选的)

boolean auth = db.authenticate("myUserName", "myPasswd");
 
五、取得Collection列表

Set<String> colls = db.getCollectionNames();
 
 for(String s : colls) {
  System.out.prinln(s);
 }

六、获取一个Collection

DBCollection coll = db.getCollection("testCollection");
 
 使用DBCollection,我们可以进行插入、查询数据等数据操作。

七、插入文档

假设有个JSON文档如下所示:
 
 {
  "name": "MongoDB",
  "type": "database",
  "count": 1,
  "info": {
     x: 203,
     y: 102
    }
 }
 
 注意:上面的JSON文档有个内嵌文档"info"。
 
 我们完全可以利用BasicDBObject来创建一个和上面的JSON一样的文档,并且把它保存在MongoDB中。
 
 DBObject doc = new BasicDBObject();
 
 doc.put("name", "MongoDB");
 doc.put("type", "database");
 doc.put("count", 1);
 
 DBObject info = new BasicDBObject();
 info.put("x", 203);
 info.put("y", 102);
 
 doc.put("info", info);
 
 coll.insert(doc);
 
八、查询第一个文档(findOne())

为了验证在上面我们保存的类似JSON的数据,我们可以用findOne()方法取得数据。
 
 findOne(): 返回一个文档;
 find(): 返回一个游标(DBCursor),其中包含一组对象DBObject;
 
 DBObject doc = coll.findOne();
 System.out.println(doc);
 
 我们将会看到控制台输出:
 { "_id" : "49902cde5162504500b45c2c" , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info" : { "x" : 203 , "y" : 102} , "_ns" : "testCollection"}
 
九、插入多个文档

为了在后来展示更多的查询方法,我们先插入几个文档,它们的JSON像这样:
 {
  "i": value
 }
 
 使用一个循环插入数据:
 
 for(int i = 0; i < 100; i++) {
  coll.insert(new BasicDBObject().append("i", i));
 }
 
 我们注意到,同一个coll,我们完全可以插入不同风格的数据,这就是MongoDB的重要特性“模式自由”。
 
十、统计文档数

现在我们已经有101份文档在数据库中了,现在统计一下看是否正确。
 
 long count = coll.getCount();
 System.out.println(count);
 
 控制台将会输出:101
 
十一、使用游标取得所有的文档

DBCursor cursor = coll.find();
 
 while(cursor.hasNext()) {
  DBObject object = cursor.next();
  System.out.println(object);
 }
 
十二、查询单个文档

DBObject query = new BasicDBObject();
 
 query.put("i", 71);
 
 cursor = coll.find(query);
 
 while(cur.hasNext()) {
  DBObject object = cursor.next();
  System.out.println(object);
 }
 
 控制台的输出类似如下:
 
 { "_id" : "49903677516250c1008d624e" , "i" : 71 , "_ns" : "testCollection"}
 
十三、查询文档集合

根据查询条件,我们可以通过DBCollection从数据库中取出多个对象,比如查询i>50的文档集合:
 
 query = new BasicDBObject();
 
 query.put("i", new BasicDBObject("$gt", 50)); // i>50
 
 cursor = coll.find(query);
 
 while(cursor.hasNext()) {
  DBObject object = cursor.next();
  System.out.println(object);
 }
 
 比如查询条件为 20<i<=30:
 
 query = new BasicDBObject();
 
 // 20<i<=30
 query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));
 
 cursor = coll.find(query);
 
 while(cursor.hasNext()) {
  DBObject object = cursor.next();
  System.out.println(object);
 }

十四、创建索引

MongoDB支持索引,并且给一个DBCollection添加索引非常简单,你只要指明需要创建索引的字段,然后指明其是升序(1)还是降序(-1)即可,比如在"i"上创建升序索引。
 
 coll.createIndex(new BasicDBObject("i", 1)); // 1代表升序
 
十五、查询索引

我们可以查询到所有的索引:
 
 List<DBObject> list = coll.getIndexInfo();
 
 for(DBObject index : list){
  System.out.println(index);
 }
 
 控制台的输出类似如下所示:
 
 { "name" : "i_1" , "ns" : "mydb.testCollection" , "key" : { "i" : 1} , "_ns" : "system.indexes"}

MongoDB的管理功能
   
一、获取所有的数据库

Mongo m = new Mongo();
 
 for(String s : m.getDatabaseNames()) {
  System.out.println(s);
 }

二、删除数据库

m.dropDatabase("my_new_db");
 
 
   MongoDB的Java类型

一、对象ID

ObjectId被用作自动生成的唯一ID.
 
 ObjectId id = new ObjectId();
 ObjectId copy = new ObjectId(id);
 
二、正则表达式

Pattern john = Pattern.compile("joh?n", CASE_INSENSITIVE);
 DBObject query = new BasicDBObject("name", john);
 
 // 查询所有 "name" 匹配 /joh?n/i 的文档
 DBCursor cursor = collection.find(query);

三、日期和时间

Date now = new Date();
 DBObject time = new BasicDBObject("ts", now);
 
 collection.save(time);
 
四、数据库引用

DBRef可以用来保存数据库引用。
 
 DBRef addressRef = new DBRef(db, "foo.bar", address_id);
 DBObject address = addressRef.fetch();
 
 DBObject person = BasicDBObjectBuilder.start()
  .add("name", "Fred")
  .add("address", addressRef)
  .get();
 collection.save(person);
 
 DBObject fred = collection.findOne();
 DBRef addressObj = (DBRef)fred.get("address");
 addressObj.fetch();
 
五、二进制数据

字节数组(byte[])被当作二进制数据。
 
六、内嵌文档

JSON样式的数据如下:
 {
  "x": {
   "y": 3
  }
 }
 
 则在MongoDB中,Java表示为:
 
 DBObject y = new BasicDBObject("y", 3);
 DBObject x = new BasicDBObject("x", y);
 
七、数组

任何继承自List的对象,在MongoDB中,都被当成是数组。
 
 如果想表示如下JSON数据:
 
 {
  "x": [
   1,
   2,
   {"foo": "bar"},
   4
  ]
 }
 
 则在Java中,应该为:
 
 List<Object> x = new ArrayList<Object>();
 x.add(1);
 x.add(2);
 x.add(new BasicDBObject("foo", "bar"));
 x.add(4);
 
 DBObject doc = new BasicDBObject("x", x);
 System.out.println(doc);

MongoDB的Java驱动使用整理 (转)的更多相关文章

  1. MongoDB资料--Java驱动, Hadoop驱动, Spark使用

    MongoDB数据库备份: mongodump -h 192.168.1.160 -d MapLoc -o /usr/local/myjar/mongo/MapLoc/数据库还原:mongoresto ...

  2. mongodb在java驱动包下的操作(转)

    推荐几章很有用的文章 java操作参考文档 http://www.cnblogs.com/hoojo/archive/2011/06/02/2068665.html http://blog.csdn. ...

  3. 【MongoDB】MongoDB的java驱动包使用

    要在Java中使用Mongo数据库 首先导入驱动包mongo-java-driver.jar. 然后获得库,获得集合.就可以对数据库操作了,比如: //创建MongoClient对象 MongoCli ...

  4. MongoDB快速入门学习笔记8 MongoDB的java驱动操作

    import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.bson.D ...

  5. MongoDB操作(1)—MongoDB java驱动核心层次结构及操作流程

    MongoDB之java驱动学习 预备: 本地运行MongoDB采用默认端口20717: 安装MongoDB驱动: 以下关键步骤. 核心层次结构或步骤: 创建连接池:MongoClient实例. 对于 ...

  6. MongoDB之Java测试代码(DAO层)

    MongoInit.java是数据库初始化及连接类 MongoUtils.java是对mongodb的各种操作方法 MongoInit.java package com.wlwcloud.datate ...

  7. MongoDB在java中的使用

    在一年前就开始在项目中使用Mongodb作为爬虫(crawler)待下载URL.下载成功URL等的存储库,最近对项目进行版本更新,根据Mongodb的最近升级情况,也对项目中的Mongodb进行了相关 ...

  8. Ubuntu14.04下Mongodb的Java API编程实例(手动项目或者maven项目)

    不多说,直接上干货! 若大家,不会安装的话,则请移步,随便挑选一种. Ubuntu14.04下Mongodb(在线安装方式|apt-get)安装部署步骤(图文详解)(博主推荐) Ubuntu14.04 ...

  9. MongoDB之Java測试代码(DAO层)

    MongoInit.java是数据库初始化及连接类 MongoUtils.java是对mongodb的各种操作方法 MongoInit.java package com.wlwcloud.datate ...

随机推荐

  1. 【51Nod】1519 拆方块 贪心+递推

    [题目]1519 拆方块 [题意]给定n个正整数,\(A_i\)表示第i堆叠了\(A_i\)个石子.每轮操作将至少有一面裸露的石子消除,问几轮所有石子均被消除.\(n \leq 10^5\). [算法 ...

  2. 第6月第17天 CGAffineTransformMake(a,b,c,d,tx,ty) 矩阵运算的原理

    1. 为了把二维图形的变化统一在一个坐标系里,引入了齐次坐标的概念,即把一个图形用一个三维矩阵表示,其中第三列总是(0,0,1),用来作为坐标系的标准.所以所有的变化都由前两列完成. 以上参数在矩阵中 ...

  3. CF359B Permutation (构造)

    CF359B Permutation \(solution:\) 作为一道构造题,这题也十分符合构造的一些通性----(找到一些规律,然后无脑循环). 构造一个长度为 \(2n\) 的排列 \(a\) ...

  4. Python 入门基础1 --语言介绍

    本节目录: 一.编程语言介绍 二.python解释器介绍 三.安装python解释器 四.运行python程序的两种方式 五.变量 六.后期补充内容 一.编程语言介绍 1.机器语言: 直接用二进制编程 ...

  5. mybatis开发dao的方法——(三)

    ------------------------1.    SqlSession使用范围------------------- 1.1     SqlSessionFactoryBuilder 通过S ...

  6. 修改history记录数门限

    你的 Bash 命令历史保存的历史命令的数量可以在 ~/.bashrc 文件里设置.在这个文件里,你可以找到下面两行: HISTSIZE=1000 HISTFILESIZE=2000 HISTSIZE ...

  7. IPsec工具之ipsec-tools

    Linux从2.6内核开始自带IPsec模块,配合IPsec-Tools,可以实现Linux的IPsec功能. IPsec-Tools包含4个模块 libipsec:PF_KEY实现库 setkey: ...

  8. Python学习系列之(一)---Python的安装

    Python几乎可以在任何平台下运行,如我们所熟悉的:Windows/Unix/Linux/Macintosh. 在这里我们说一下,在Windows操作系统中安装python. 我的操作系统为:Win ...

  9. google closure 笔记-SOY template

    一 使用js模板 closure template 目前支持Java和js.但是模板语法的设计不依赖于任何现成的语言,所以理论上可以支持任何语言,只是暂时只有java编译器. 使用js模板:编写模板文 ...

  10. nio--自己总结

    阻塞/非阻塞  +  同步/异步 其实,这两者存在本质的区别,面向的对象是不同的. 阻塞/非阻塞:进程/线程需要操作的数据如果尚未就绪,是否妨碍了当前进程/线程的后续操作. 同步/异步:数据如果尚未就 ...