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; /**
* 构造函数
* @throws Exception
*/
public MongoDBDao() throws Exception{
this.mongoClient =getMongoClient();
} public void getMongoDatabase(String dataBsae) throws Exception{
database = this.mongoClient.getDatabase(dataBsae);
} public void getDB(String dataBsae){
get_db_credit = this.mongoClient.getDB(dataBsae);
} public DBCollection getDBCollection(String dataBsae,String tableName){
getDB(dataBsae);
this.dbcollection = get_db_credit.getCollection(tableName);
return this.dbcollection ;
} public MongoCollection getMongoCollection(String dataBsae,String tableName) throws Exception{
getMongoDatabase(dataBsae);
this.collection = database.getCollection(tableName);
return this.collection;
} public MongoCursor<Document> getMongoCursor(String dataBsae,String tableName,BasicDBObject searchQueryCity,BasicDBObject sort) throws Exception{
getMongoCollection(dataBsae, tableName);
if(sort !=null){
this.cursor = this.collection.find(searchQueryCity).sort(sort).iterator();
}else{
this.cursor = this.collection.find(searchQueryCity).iterator();
} return cursor;
} public DBCursor getDBCursor(String dataBsae,String tableName,BasicDBObject searchQueryCity){
getDBCollection(dataBsae,tableName);
dbCursor = this.dbcollection.find(searchQueryCity);
return dbCursor;
} public FindIterable<Document> getFindIterable(String dataBsae,String tableName,BasicDBObject searchQueryCity,int page,int size, BasicDBObject sort) throws Exception{
getMongoCollection(dataBsae, tableName);
return findIterable = collection.find(searchQueryCity).skip(page).sort(sort)
.limit(size);
} public void closeDBCursor(){
dbCursor.close();
mongoClient.close();
} public void closeMongoCursor(){
cursor.close();
mongoClient.close();
} public void closeMongoClient(){
mongoClient.close();
}
/**
* 获取MONGODB客户端实例
*
* @return
* @throws Exception
*/
private MongoClient getMongoClient() throws Exception {
try {
// 解密用密钥
String sKey = SysPropertyJdbc.getProperty("jdbc.deskey")
.substring(4, 28); String sIp = DESUtil.decryptMode(sKey,
MongoDBProperty.getProperty("mip"));
int iPort = Integer.valueOf(DESUtil.decryptMode(sKey,
MongoDBProperty.getProperty("mport")));
String sUser = DESUtil.decryptMode(sKey,
MongoDBProperty.getProperty("muser"));
String sPasword = DESUtil.decryptMode(sKey,
MongoDBProperty.getProperty("mpassword"));
String sDbNm = DESUtil.decryptMode(sKey,
MongoDBProperty.getProperty("mdb")); // ===================================================//
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 = new BasicDBObject();
condition.put("statDate", new BasicDBObject("$gte",matter2.parse(datestart)).append("$lte", matter2.parse(dateend))); //日期查询条件 查询时间范围 gt大于, lt小于 gte、ge大于等于   lte、le 小于等于
if (!"999".equals(cityCode)) {
condition.put("cityCode", cityCode);
}
BasicDBObject sort = new BasicDBObject();
// 1,表示正序; -1,表示倒序
sort.put("cityCode", 1);// 按照活跃度排名
MongoCursor<Document> cursor1 = mongoClient.getMongoCursor(mdb, "app_user_stat", condition,sort);
Integer i = 0;
try{
while (cursor1.hasNext()) {
cursor1.next();
i++;
}
} finally {
cursor1.close();
}
pageView.setTotal(i);
MongoCursor<Document> cursor = mongoClient.getFindIterable(mdb, "app_user_stat", condition, (curPage - 1) * pageView.getPageSize(), pageView.getPageSize(), sort).iterator();
List<Record> appDetail = new ArrayList<Record>();
try{
while (cursor.hasNext()) {
Iterator<Entry<String, Object>> iter = cursor.next().entrySet()
.iterator();
Record record = new Record();
while (iter.hasNext()) {
Entry eTmp = (Entry) iter.next();
Map colums = record.getColumns();
String sKeyTmp = eTmp.getKey().toString();
String sKeyValue = "";
if (eTmp.getValue() == null) {
sKeyValue = "0";
} else {
sKeyValue = eTmp.getValue().toString();
}
switch (sKeyTmp) {
case "statDate" :
if ("0".equals(sKeyValue)) {
colums.put("DATE", dateFormat.format(new Date()));
} else {
System.out.println("test" + sKeyValue);
colums.put("DATE",
dateFormat.format(eTmp.getValue()));
}
break;
case "cityName" :
// String cityName = TCity.dao
// .getCityInfoByCityCd(sKeyValue).get(0)
// .getStr("city_name");
colums.put("CITY", sKeyValue);
break;
case "userSum" :
colums.put("TOTALUSER", sKeyValue);
break;
case "newUserSum" :
colums.put("NEWADD", sKeyValue);
break;
case "activeUserDay" :
colums.put("ACTIVEDAY", sKeyValue);
break;
case "activeUserWeek" :
colums.put("ACTIVEWEEK", sKeyValue);
break;
case "activeUserMonth" :
colums.put("ACTIVEMONTH", sKeyValue);
break;
case "openTimes" :
colums.put("APPOPEN", sKeyValue);
break;
case "avgTimeDay" :
colums.put("AVGDAY", sKeyValue);
break;
case "avgTimeWeek" :
colums.put("AVGWEEK", sKeyValue);
break;
}
}
appDetail.add(record);
}
} finally {
cursor.close();
mongoClient.closeMongoClient();
}

 

MongoDBDao 工具类(包含分页取数据)的更多相关文章

  1. 借助Spring工具类如何实现支持数据嵌套的赋值操作

    假设有两个Bean A和B,想将B中的属性赋值到A实体中,可以使用get set来实现,当属性过多时,就会显得很冗余,可以使用spring提供的BeanUtils.copyProperties()来实 ...

  2. Java并发工具类之线程间数据交换工具Exchanger

    Exchanger是一个用于线程间协做的工具类,主要用于线程间的数据交换.它提供了一个同步点,在这个同步点,两个线程可以彼此交换数据.两个线程通过exchange方法交换数据,如果一个线程执行exch ...

  3. 利用BeanUtils工具类封装表单数据

    一.BeanUtils工具类的使用 1.首先导入BeanUtils工具类的jar包 commons-beanutils-1.8.0.jar commons-logging-1.1.1.jar 2.se ...

  4. 使用POI导出EXCEL工具类并解决导出数据量大的问题

    POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...

  5. 利用JDBC工具类添加和查询数据-Java(新手)

    JDBC工具类: 1 package cn.lxr.jdbclx; 2 3 import java.sql.*; 4 5 public class JDBCUtils { 6 private stat ...

  6. Javascript加载talbe(包含分页、数据下载功能)

    效果图如下: 首先简单说明一下,后面会给所涉及到的代码都贴上来的. 1.excel图标是一个用户控件,用来触发下载 2.首页.上页......每页多少条,这一块是一个整体,你可以选择放置在表格下面,或 ...

  7. SQL 2012 分页取数据

    ,), data int ) select * from t1 row rows only create clustered index t1c on t1(id) declare @i int ) ...

  8. php 循环从数据库分页取数据批量修改数据

    //批量修改email重复 public function getEmail() { $this->model = app::get('shop')->model('manage'); / ...

  9. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

随机推荐

  1. 绑定一个值给radio

    在ASP.NET MVC程序中,需要给一个radio list表绑定一个值. 下面是Insus.NET实现的方法: 使用foreach来循环radio每一个选项,如果值与选项的值相同,那这个选项为选中 ...

  2. SSH框架和Redis的整合(1)

    一个已有的Struts+Spring+Hibernate项目,以前使用MySQL数据库,现在想把Redis也整合进去. 1. 相关Jar文件 下载并导入以下3个Jar文件: commons-pool2 ...

  3. 浏览器对localstorage的支持情况以及localstorage在saas系统中的应用实践思考

    首先,还是要说,任何一种新特性的引入,通常有着其特有的场景和解决的目标需求,localstorage也一样.在我们的应用场景中,主要在金融业务服务的saas系统.其中涉及很多更改频率很多的元数据的客户 ...

  4. JS eval()函数的一些见解

    一.eval是基本使用规则 1 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 2 eval(string) 3 string必需.要计算的字符串,其中含有要计算的 ...

  5. 实现一个基于 SharePoint 2013 的 Timecard 应用(上)

    在 SharePoint 2013 上面实现一个 Timecard 应用的想法来自一个真实的需求,而实现的方案在我脑海里面盘旋已经很久了,终于这几天准备安排点儿时间将它实现出来. “ We start ...

  6. 了解JavaScript 数组对象及其方法

    数组在我目前学习过的编程语言中都可以见到, 形形色色的方法也数不胜数, 不过功能都一样, 最多也就是方法名稍稍有所不同, 老外也没个准啊, 如果英语比较好的同学对于学习方法(method)来说是很快的 ...

  7. swift学习笔记4——扩展、协议

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  8. ASP.NET MVC 3 网站优化总结(一) 使用 Gzip 压缩

    网站开启 Gzip 压缩的好处相信很多人都已经清楚,这样做可以提高网站的性能.那么为什么很多网站没有开启 Gzip 压缩功能呢?原因有4点:防病毒软件.浏览器 bug.网站代理和服务器未配置. 使用 ...

  9. ddd 聚合根 之 聚合与不聚合 设计

    聚合 不聚合 订单和订单明细 论坛主贴与贴子回复 订单和收货地址(vo)  

  10. 自动分割mp3等音频视频文件的脚本

    由于种种关系,我需要对一批mp3文件进行分割(切割).每个音频文件大约1小时,需要切成每10分钟1个文件,文件名要带序号.手工分割工作量太大,不符合我等“懒人”的做法.于是找到了大名的”格式工厂“. ...