MongoDBDao 工具类(包含分页取数据)

mongdb 工具类
package e16wifi.statistic.com.mongodb;

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

import e16wifi.statistic.com.utils.DESUtil;
import e16wifi.statistic.com.utils.MongoDBProperty;
import e16wifi.statistic.com.utils.SysPropertyJdbc;

public class MongoDBDao {
//数据库
private MongoDatabase database = null;
private DB get_db_credit = null;
private MongoCollection<Document> collection = null;
private DBCollection dbcollection = null;
private DBCursor dbCursor = null;
private MongoCursor<Document> cursor = null;
private FindIterable<Document> findIterable = null;
//客户端实例
private MongoClient mongoClient = null;

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 构造函数
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> Exception
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> MongoDBDao() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception{
     </span><span style="color: rgba(0, 0, 255, 1)">this</span>.mongoClient =<span style="color: rgba(0, 0, 0, 1)">getMongoClient();
 }

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> getMongoDatabase(String dataBsae) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception{
    database </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.mongoClient.getDatabase(dataBsae);
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> getDB(String dataBsae){
    get_db_credit </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.mongoClient.getDB(dataBsae);
}
 
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">  DBCollection  getDBCollection(String dataBsae,String tableName){
    getDB(dataBsae);
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.dbcollection =<span style="color: rgba(0, 0, 0, 1)">  get_db_credit.getCollection(tableName);
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.dbcollection ;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> MongoCollection getMongoCollection(String dataBsae,String tableName) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception{
    getMongoDatabase(dataBsae);
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.collection =<span style="color: rgba(0, 0, 0, 1)"> database.getCollection(tableName);
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.collection;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span>  MongoCursor&lt;Document&gt; getMongoCursor(String dataBsae,String tableName,BasicDBObject searchQueryCity,BasicDBObject sort) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception{
    getMongoCollection(dataBsae, tableName);
    </span><span style="color: rgba(0, 0, 255, 1)">if</span>(sort !=<span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">){
        </span><span style="color: rgba(0, 0, 255, 1)">this</span>.cursor =  <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.collection.find(searchQueryCity).sort(sort).iterator();
    }</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">{
        </span><span style="color: rgba(0, 0, 255, 1)">this</span>.cursor =  <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.collection.find(searchQueryCity).iterator();
    }
    
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> cursor;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)">  DBCursor getDBCursor(String dataBsae,String tableName,BasicDBObject searchQueryCity){
    getDBCollection(dataBsae,tableName);
    dbCursor </span>=  <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.dbcollection.find(searchQueryCity);
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> dbCursor;
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> FindIterable&lt;Document&gt; getFindIterable(String dataBsae,String tableName,BasicDBObject searchQueryCity,<span style="color: rgba(0, 0, 255, 1)">int</span> page,<span style="color: rgba(0, 0, 255, 1)">int</span> size, BasicDBObject sort) <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception{
    getMongoCollection(dataBsae, tableName);
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> findIterable =<span style="color: rgba(0, 0, 0, 1)"> collection.find(searchQueryCity).skip(page).sort(sort)
            .limit(size);
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> closeDBCursor(){
    dbCursor.close();
    mongoClient.close();
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> closeMongoCursor(){
    cursor.close();
    mongoClient.close();
}

</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> closeMongoClient(){
    mongoClient.close();
}
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * 获取MONGODB客户端实例
 * 
 * </span><span style="color: rgba(128, 128, 128, 1)">@return</span><span style="color: rgba(0, 128, 0, 1)">
 * </span><span style="color: rgba(128, 128, 128, 1)">@throws</span><span style="color: rgba(0, 128, 0, 1)"> Exception
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">private</span> MongoClient getMongoClient() <span style="color: rgba(0, 0, 255, 1)">throws</span><span style="color: rgba(0, 0, 0, 1)"> Exception {
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 解密用密钥</span>
        String sKey = SysPropertyJdbc.getProperty("jdbc.deskey"<span style="color: rgba(0, 0, 0, 1)">)
                .substring(</span>4, 28<span style="color: rgba(0, 0, 0, 1)">);

        String sIp </span>=<span style="color: rgba(0, 0, 0, 1)"> DESUtil.decryptMode(sKey,
                MongoDBProperty.getProperty(</span>"mip"<span style="color: rgba(0, 0, 0, 1)">));
        </span><span style="color: rgba(0, 0, 255, 1)">int</span> iPort =<span style="color: rgba(0, 0, 0, 1)"> Integer.valueOf(DESUtil.decryptMode(sKey,
                MongoDBProperty.getProperty(</span>"mport"<span style="color: rgba(0, 0, 0, 1)">)));
        String sUser </span>=<span style="color: rgba(0, 0, 0, 1)"> DESUtil.decryptMode(sKey,
                MongoDBProperty.getProperty(</span>"muser"<span style="color: rgba(0, 0, 0, 1)">));
        String sPasword </span>=<span style="color: rgba(0, 0, 0, 1)"> DESUtil.decryptMode(sKey,
                MongoDBProperty.getProperty(</span>"mpassword"<span style="color: rgba(0, 0, 0, 1)">));
        String sDbNm </span>=<span style="color: rgba(0, 0, 0, 1)"> DESUtil.decryptMode(sKey,
                MongoDBProperty.getProperty(</span>"mdb"<span style="color: rgba(0, 0, 0, 1)">));

        </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> ===================================================</span><span style="color: rgba(0, 128, 0, 1)">//

List<ServerAddress> serverList = new ArrayList<ServerAddress>();
serverList.add(
new ServerAddress(sIp, iPort));
// ===================================================//
List<MongoCredential> mcList = new ArrayList<MongoCredential>();
mcList.add(MongoCredential.createCredential(sUser, sDbNm,
sPasword.toCharArray()));
// ===================================================//
MongoClientOptions.Builder builder = MongoClientOptions.builder();
// 与目标数据库能够建立的最大 connection 数量为 50
builder.connectionsPerHost(50);
// 如果当前所有的 connection 都在使用中,则每个 connection 上可以有 50 个线程排队等待
builder.threadsAllowedToBlockForConnectionMultiplier(50);
// 一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间为 2 分钟
// 这里比较危险,如果超过 maxWaitTime 都没有获取到这个连接的话,该线程就会抛出 Exception
// 故这里设置的 maxWaitTime 应该足够大,以免由于排队线程过多造成的数据库访问失败
builder.maxWaitTime(1000 * 60 * 2);
// 与数据库建立连接的 timeout 设置为 1 分钟
builder.connectTimeout(1000 * 60 * 1);
// ===================================================//
MongoClientOptions mco = builder.build();
return new MongoClient(serverList, mcList, mco);
}
catch (Exception e) {
throw e;
}
}

}


mongdb 取数据,(包含分页)


 PageView pageView = new PageView();
        CommonUtil commonUtil = new CommonUtil();
        String cityCode = this.getPara("selCity");// 当前城市
        if (StringUtils.isNullOrEmpty(cityCode)) {
            cityCode = iSelCity + "";
        }
        // 分页信息开始
        String page = StringUtils.isNullOrEmpty(this.getPara("sPage"))
                ? "1"
                : this.getPara("sPage");
        Integer curPage = Integer.parseInt(page);
        pageView.setCurrentPage(curPage);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        logger.debug("START...");
        Date date = new Date();// 取时间
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, -1);// 把日期往后增加一天. 整数往后推, 负数往前移动
        date = calendar.getTime();
        // App 用户基本信息
        // mongoDB 获取连接
        MongoDBDao mongoClient = new MongoDBDao();
        // 获取数据库
        String mdb = DESUtil.decryptMode(
                SysPropertyJdbc.getProperty("jdbc.deskey").substring(4, 28),
                MongoDBProperty.getProperty("mdb"));
    BasicDBObject condition </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BasicDBObject();
   <strong><span style="color: rgba(255, 0, 0, 1)"> condition.put("statDate", new BasicDBObject("$gte",matter2.parse(datestart)).append("$lte", matter2.parse(dateend))); </span></strong></span><strong><span style="color: rgba(255, 0, 0, 1)">//日期查询条件  查询时间范围 gt大于, lt小于 gte、ge大于等于 &nbsp; lte、le 小于等于
    </span></strong><span style="color: rgba(0, 0, 255, 1)">if</span> (!"999"<span style="color: rgba(0, 0, 0, 1)">.equals(cityCode)) {
        condition.put(</span>"cityCode"<span style="color: rgba(0, 0, 0, 1)">, cityCode);
    }
    BasicDBObject sort </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BasicDBObject();
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1,表示正序; -1,表示倒序</span>
    sort.put("cityCode", 1);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 按照活跃度排名</span>
    MongoCursor&lt;Document&gt; cursor1 = mongoClient.getMongoCursor(mdb, "app_user_stat"<span style="color: rgba(0, 0, 0, 1)">, condition,sort);
    Integer i </span>= 0<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">{
    </span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> (cursor1.hasNext()) {
        cursor1.next();
        i</span>++<span style="color: rgba(0, 0, 0, 1)">;
    }
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        cursor1.close();
    }
    pageView.setTotal(i);
    MongoCursor</span>&lt;Document&gt; cursor = mongoClient.getFindIterable(mdb, "app_user_stat", condition, (curPage - 1) *<span style="color: rgba(0, 0, 0, 1)"> pageView.getPageSize(), pageView.getPageSize(), sort).iterator();
    List</span>&lt;Record&gt; appDetail = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList&lt;Record&gt;<span style="color: rgba(0, 0, 0, 1)">();
    </span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">{
    </span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> (cursor.hasNext()) {
        Iterator</span>&lt;Entry&lt;String, Object&gt;&gt; iter =<span style="color: rgba(0, 0, 0, 1)"> cursor.next().entrySet()
                .iterator();
        Record record </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Record();
        </span><span style="color: rgba(0, 0, 255, 1)">while</span><span style="color: rgba(0, 0, 0, 1)"> (iter.hasNext()) {
            Entry eTmp </span>=<span style="color: rgba(0, 0, 0, 1)"> (Entry) iter.next();
            Map colums </span>=<span style="color: rgba(0, 0, 0, 1)"> record.getColumns();
            String sKeyTmp </span>=<span style="color: rgba(0, 0, 0, 1)"> eTmp.getKey().toString();
            String sKeyValue </span>= ""<span style="color: rgba(0, 0, 0, 1)">;
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (eTmp.getValue() == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
                sKeyValue </span>= "0"<span style="color: rgba(0, 0, 0, 1)">;
            } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                sKeyValue </span>=<span style="color: rgba(0, 0, 0, 1)"> eTmp.getValue().toString();
            }
            </span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)"> (sKeyTmp) {
                </span><span style="color: rgba(0, 0, 255, 1)">case</span> "statDate"<span style="color: rgba(0, 0, 0, 1)"> :
                    </span><span style="color: rgba(0, 0, 255, 1)">if</span> ("0"<span style="color: rgba(0, 0, 0, 1)">.equals(sKeyValue)) {
                        colums.put(</span>"DATE", dateFormat.format(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Date()));
                    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                        System.out.println(</span>"test" +<span style="color: rgba(0, 0, 0, 1)"> sKeyValue);
                        colums.put(</span>"DATE"<span style="color: rgba(0, 0, 0, 1)">,
                                dateFormat.format(eTmp.getValue()));
                    }
                    </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 0, 255, 1)">case</span> "cityName"<span style="color: rgba(0, 0, 0, 1)"> :
                    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> String cityName = TCity.dao
                    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> .getCityInfoByCityCd(sKeyValue).get(0)
                    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> .getStr("city_name");</span>
                    colums.put("CITY"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue);
                    </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 0, 255, 1)">case</span> "userSum"<span style="color: rgba(0, 0, 0, 1)"> :
                    colums.put(</span>"TOTALUSER"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue);
                    </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 0, 255, 1)">case</span> "newUserSum"<span style="color: rgba(0, 0, 0, 1)"> :
                    colums.put(</span>"NEWADD"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue);
                    </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 0, 255, 1)">case</span> "activeUserDay"<span style="color: rgba(0, 0, 0, 1)"> :
                    colums.put(</span>"ACTIVEDAY"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue);
                    </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 0, 255, 1)">case</span> "activeUserWeek"<span style="color: rgba(0, 0, 0, 1)"> :
                    colums.put(</span>"ACTIVEWEEK"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue);
                    </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 0, 255, 1)">case</span> "activeUserMonth"<span style="color: rgba(0, 0, 0, 1)"> :
                    colums.put(</span>"ACTIVEMONTH"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue);
                    </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 0, 255, 1)">case</span> "openTimes"<span style="color: rgba(0, 0, 0, 1)"> :
                    colums.put(</span>"APPOPEN"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue);
                    </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 0, 255, 1)">case</span> "avgTimeDay"<span style="color: rgba(0, 0, 0, 1)"> :
                    colums.put(</span>"AVGDAY"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue);
                    </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
                </span><span style="color: rgba(0, 0, 255, 1)">case</span> "avgTimeWeek"<span style="color: rgba(0, 0, 0, 1)"> :
                    colums.put(</span>"AVGWEEK"<span style="color: rgba(0, 0, 0, 1)">, sKeyValue);
                    </span><span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
            }
        }
        appDetail.add(record);
    }
    } </span><span style="color: rgba(0, 0, 255, 1)">finally</span><span style="color: rgba(0, 0, 0, 1)"> {
        cursor.close();
        mongoClient.closeMongoClient();
    }</span></pre>