日期:2014-05-16 浏览次数:20635 次
// 构造方法 // replicaSetSeeds 所有 Server 的地址 // options 默认的查询设置 public Mongo( List<ServerAddress> replicaSetSeeds , MongoOptions options ) throws MongoException { // 设置类变量 _addr = null; _addrs = replicaSetSeeds; _options = options; // 应用查询设置 _applyMongoOptions(); // 创建 TCP 连接实例 _connector = new DBTCPConnector( this , _addrs ); // 启动数据清理线程 _cleaner = new DBCleanerThread(); _cleaner.start(); } // 应用查询设置 void _applyMongoOptions() { // 是否在 Slave Server 上执行查询 if (_options.slaveOk) slaveOk(); // 应用默认的写入设置 setWriteConcern( _options.getWriteConcern() ); } // 应用默认的写入设置 public void setWriteConcern( WriteConcern concern ){ _concern = concern; }
// 获取所有数据库的名称 public List<String> getDatabaseNames() throws MongoException { // 创建表示数据库命令的 DBOBject BasicDBObject cmd = new BasicDBObject(); cmd.put("listDatabases", 1); // 使用 admin 数据库执行命令并返回结果 CommandResult res = getDB( "admin" ).command(cmd, getOptions()); // 有错误的情况下抛出异常 res.throwOnError(); // 获取结果中的 databases 属性,即数据库列表 List l = (List)res.get("databases"); // 遍历 databases,将名称保存到一个 list 中,并返回结果 List<String> list = new ArrayList<String>(); for (Object o : l) { list.add(((BasicDBObject)o).getString("name")); } return list; }
// 通过名称获取指定的数据库 public DB getDB( String dbname ){ // _dbs 是一个用于缓存结果的 Map (名称 => DB) // 先在缓存中查询以节省时间 DB db = _dbs.get( dbname ); if ( db != null ) return db; // 缓存中不存在,则创建新的 DB 实例 db = new DBApiLayer( this , dbname , _connector ); DB temp = _dbs.putIfAbsent( dbname , db ); if ( temp != null ) return temp; return db; }