• MongoDB的Java驱动使用整理 (转)


    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);

  • 相关阅读:
    201871010106丁宣元 《面向对象程序设计(java)》第八周学习总结
    201871010106丁宣元 《面向对象程序设计(java)》第十一周学习总结
    201871010106丁宣元 《面向对象程序设计(java)》第十周学习总结
    学习:数据结构树状数组
    学习:数据结构线段树
    学习:数据结构哈希
    学习:数据结构单调栈
    学习:数学欧拉定理与扩展欧拉定理
    CRUD全栈式编程架构之导入导出的设计
    CRUD全栈式编程架构之服务层的设计
  • 原文地址:https://www.cnblogs.com/qq78292959/p/4089311.html
Copyright © 2020-2023  润新知