MongoDB 和Java访问MongoDB数据库的程序

引用


面向集合, 意思是数据被分组到若干集合,这些集合称作聚集(collections). 在数据库里每个聚集有一个唯一的名字,可以包含无限个文档. 聚集是RDBMS中表的同义词,区别是聚集不需要进行模式定义.
模式自由, 意思是数据库并不需要知道你将存入到聚集中的文档的任何结构信息.实际上,你可以在同一个聚集中存储不同结构的文档.
文档型, 意思是我们存储的数据是键-值对的集合,键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档. 我们把这个数据格式称作 "[BSON]"即 "Binary Serialized dOcument Notation."
 面向文档存储:(类JSON数据模式简单而强大)。
  高效的传统存储方式:支持二进制数据及大型对象(如照片和视频)。
  复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。
  Auto-Sharding自动分片支持云级扩展性(处于早期alpha阶段):自动分片功能支持水平的数据库集群,可动态添加额外的机器。
  动态查询:它支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  全索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
  支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
  面向集合存储,易存储对象类型的数据:存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型;
  *模式自由:存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义;
  *支持完全索引,包含内部对象。
  *支持复制和故障恢复。
  *自动处理碎片: 自动分片功能支持水平的数据库集群,可动态添加额外的机器
  查询监视:Mongo包含一个监视工具用于分析数据库操作的性能

MongoDB的功能
       查询:基于查询对象或者类SQL语句搜索文档. 查询结果可以排序,进行返回大小限制,可以跳过部分结果集,也可以返回文档的一部分.
       插入和更新 : 插入新文档,更新已有文档.
       索引管理 : 对文档的一个或者多个键(包括子结构)创建索引,删除索引等等
常用命令: 所有MongoDB 操作都可以通过socket传输的DB命令来执行.

以下是Java测试程序,基于mongo-2.8.0.jar包作为驱动


package com.xiaomiao.test;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.util.JSON;

public class MongoDBTest {

public static void main(String[] args)  throws UnknownHostException,MongoException{
  // TODO Auto-generated method stub
  try {
   // default MongoDB server is localhost
    String ServerIP = "192.168.2.98";
    String MyUsername ="sa";
    char MyPassword[] = { 's','a'};
  
    Mongo mongo = new Mongo(ServerIP,27017);
     
             // 连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立
    DB db = mongo.getDB("my_mongodb");
  
    boolean auth = db.authenticate(MyUsername, MyPassword);
  
    if (!auth)
     throw new MongoException("MongoDB auth failure.");
     
    // Get collection from MongoDB, database named "yourDB"
    // 从MongoDB中获得名为yourColleection的数据集合,如果该数据集合不存在,MongoDB会为其新建立
    DBCollection collection = db.getCollection("yourCollection");
  
    // 清除已经插入的documents
    collection.drop();
             
    //使用BasicDBObject对象创建一个mongodb的document,并给予赋值。
    BasicDBObject document = new BasicDBObject();
    document.put("id", 1001);
    document.put("msg", "hello world mongoDB in Java");
  
      
    //将新建立的document保存到collection中去
    collection.insert(document);
      
    //System.out.println(collection.save(document).getN());
  
    // 创建要查询的document
    BasicDBObject searchQuery = new BasicDBObject();
    searchQuery.put("id", 1001);
    // 使用collection的find方法查找document
    DBCursor cursor = collection.find(searchQuery);
    //循环输出结果
    while (cursor.hasNext()) {
     System.out.println(cursor.next());
    }
  
    // 插入一条复合记录的document
    BasicDBObject doc = new BasicDBObject();
  
    doc.put("name","MongoDB");
    doc.put("type","Database");
    doc.put("count", 1);
  
    BasicDBObject info = new BasicDBObject();
    info.put("x",203);
    info.put("y",102);
  
    doc.put("info", info);
  
    //将新建立的document保存到collection中去
    collection.insert(doc);
  
    // loop 插入100 条documents
    for(int i = 0; i < 100; i++){
     collection.insert(new BasicDBObject().append("i", i));
    }
  
   //直接插入BasicDBObjectBuilder对象构造的document
    insert_builder_obj(collection);
  
    //直接插入Map对象构造的document到collection
    insert_map_obj(collection);
  
    // 直接插入JSON格式的document数据
    insert_json_obj(collection);
  
    DBCursor cur = collection.find();
  
    while (cur.hasNext()){      
     System.out.println(cur.next());
    }
  
    long count = collection.getCount();
    System.out.println("Total documents: " + count);
    System.out.println("Done");
  } catch (UnknownHostException e) {
   e.printStackTrace();
  } catch (MongoException e) {
   e.printStackTrace();
  }
}


private static void insert_json_obj(DBCollection col){
   
  String json = "{'database': 'mkyongDB','table': 'hosting'," +
  "'detail' : {'records' : 99, 'index' : 'vps_index1', 'active' : 'true'}}";
 
  DBObject dbObject =(DBObject)JSON.parse(json);
 
  try { 
   col.insert(dbObject);
  }
  catch (MongoException e) {
    e.printStackTrace();
  }
}


private static void insert_map_obj(DBCollection col){
 
  Map<String, Object> documentMap =new HashMap<String, Object>();
  documentMap.put("database","mongoDB");
  documentMap.put("table", "hosting");
 
  Map<String, String> documentMapDetail =new HashMap<String, String>();
  documentMapDetail.put("records", "100");
  documentMapDetail.put("index", "vps_index1");
  documentMapDetail.put("active", "true");
 
  documentMap.put("detail", documentMapDetail);
 
  col.insert(new BasicDBObject(documentMap));
 
}


private static void insert_builder_obj(DBCollection col){
  BasicDBObjectBuilder documentBuilder = BasicDBObjectBuilder.start()
    .add("database","MySqlDB")
    .add("table","hosting");
 
  BasicDBObjectBuilder documentBuilderDetail = BasicDBObjectBuilder.start()
  .add("records","99")
  .add("index","vps_index1")
  .add("active","true");
 

猜你喜欢

转载自dannyhz.iteye.com/blog/2395245