zoukankan      html  css  js  c++  java
  • MongoDB项目中常用方法

    使用MongoDB连接池MongoOptions来进行连接 以及相关方法的调用

    //获得驱动地址(这里的驱动 写入了配置文件中)
    String serverAddressStr = Configure.getInstance().getProperty("SERVER_ADDRESSES");
    			log.debug("serverAddressStr:" + serverAddressStr);
    
    如果需要连接的MongoDB为多个,则用逗号分隔开,加入集合中以便后续使用
    String[] serverAddressArray = serverAddressStr.split(",");
    			for (String address : serverAddressArray) {
    				log.debug("address:" + address);
    				addresslist.add(new ServerAddress(address));
    			}
    //声明MongoOptions对象
    MongoOptions options = new MongoOptions();
    //autoConnectRetry方法用于在连接失败后是否重新连接,可写成配置项
    		String autoConnectRetry = Configure.getInstance().getProperty("AUTO_CONNECT_RETRY");
    if (StringUtils.isNotEmpty(autoConnectRetry)) {
    			options.autoConnectRetry = Boolean.valueOf(autoConnectRetry);
    		}
    //设置连接池的大小也可写成配置项 方便以后调整 使用的是autoConnectRetry方法
    		String connectionsPerHost = Configure.getInstance().getProperty("CONNECTIONS_PER_HOST");
    if (StringUtils.isNotEmpty(connectionsPerHost)) {
    			options.connectionsPerHost = Integer.valueOf(connectionsPerHost);
    		}
    //线程队列
    String threadsAllowedToBlockForConnectionMultiplier = Configure.getInstance().getProperty("THREAD_ALLOWED");
    		log.debug("[THREAD_ALLOWED]:" + threadsAllowedToBlockForConnectionMultiplier);
    		if (StringUtils.isNotEmpty(threadsAllowedToBlockForConnectionMultiplier)) {
    			options.threadsAllowedToBlockForConnectionMultiplier = Integer.valueOf(threadsAllowedToBlockForConnectionMultiplier);
    		}
    //最大阻塞时间
    String connectTimeout = Configure.getInstance().getProperty("CONNECT_TIME_OUT");
    		log.debug("[CONNECT_TIME_OUT]:" + connectTimeout);
    		if (StringUtils.isNotEmpty(connectTimeout)) {
    			options.connectTimeout = Integer.valueOf(connectTimeout);
    		}
    // 被阻塞线程从连接池获取连接的最长等待时间(ms)
    		// options.maxWaitTime = 12000;
    		String maxWaitTime = Configure.getInstance().getProperty("MAX_WAIT_TIME");
    		log.debug("[MAX_WAIT_TIME]:" + maxWaitTime);
    		if (StringUtils.isNotEmpty(maxWaitTime)) {
    			options.maxWaitTime = Integer.valueOf(maxWaitTime);
    		}
    // 是否答应驱动从次要节点读取数据,默认为false
    		String slaveOk = Configure.getInstance().getProperty("SlAVE_OK");
    		log.debug("[SlAVE_OK]:" + slaveOk);
    		if (StringUtils.isNotEmpty(slaveOk)) {
    			options.slaveOk = Boolean.valueOf(slaveOk);
    		}

     从某个中按照字段查找相应数据 并放入集合中

    public DBObject findOne(String collectionName,String keystr,String value){
        		DB db = this.getDB();
    		DBCollection collection = db.getCollection(collectionName);
    		DBObject dbObject;
    		try {
    			dbObject = collection.findOne(new BasicDBObject(keystr, value));
    			log.debug("dbObject1:" + dbObject);
    			if (dbObject == null) {
    				db = this.switchCluster().getDB();
    				collection = db.getCollection(collectionName);
    				dbObject = collection.findOne(new BasicDBObject(keystr, value));
    				log.debug("dbObject1-2:" + dbObject);
    			}
    		} catch (MongoException e) {
    			db = this.switchCluster().getDB();
    			collection = db.getCollection(collectionName);
    			dbObject = collection.findOne(new BasicDBObject(keystr, value));
    			log.debug("dbObject2:" + dbObject);
    		}
    		return dbObject;
    	}
    

      前台通过DBCollection 根据名称获取相应的value 然后加入list中~

     	public List<DBObject> getValue(List<String> columnNames) {
                 
      db = MongoDB.getInstance().getDB();
    		DBCollection collection = db.getCollection("labels");
    		List<DBObject> list = new ArrayList<DBObject>();
    		BasicDBList dbList = new BasicDBList();
    		dbList.addAll(columnNames);
    		DBObject inObj = new BasicDBObject("$in", dbList);
    		DBCursor cursor = collection.find(new BasicDBObject("column_name", inObj));
    		DBObject dbObj = null;
    		while (cursor.hasNext()) {
    			dbObj = cursor.next();
    			list.add(dbObj);
    		}
    		return list;                        
  • 相关阅读:
    求24点
    关于参数和返回值的常量性
    点到平面的距离公式
    大端序与小端序
    Quake3中的绝对值函数
    整数超出范围时如何表示?
    关于数组的几道面试题
    在移位数组中查找数
    时间复杂度O(n),空间复杂度O(1)的排序
    C++之对象切割
  • 原文地址:https://www.cnblogs.com/yangsy0915/p/4920178.html
Copyright © 2011-2022 走看看