在Java中实现MongoDB的Group效能
在Java中实现MongoDB的Group功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
/**
*
keyColumn : new String[]{"xxxName","xxxType"} <br>
*
condition : 查询条件 ,可为空<br>
*
initial : 分组统计初始变量,为空时自动为每列提供初始变量<br>
*
reduce : 记录处理function<br>
*
finalize : finalize函数,可为空 <br>
*/
public BasicDBList
group(String[] keyColumn, DBObject condition,
DBObject
initial, String reduce, String finalize) {
DBCollection
coll = getCollection();
DBObject
key = new BasicDBObject();
for ( int i
= 0 ;
i < keyColumn.length; i++) {
key.put(keyColumn[i], true );
}
condition
= (condition == null )
? new BasicDBObject()
: condition;
if (StringUtils.isEmpty(finalize))
{
finalize
= null ;
}
if (initial
== null )
{ //定义一些初始变量
initial
= new BasicDBObject();
for ( int i
= 0 ;
i < keyColumn.length; i++) {
DBObject
index = new BasicDBObject();
index.put( "count" , 0 );
index.put( "sum" , 0 );
index.put( "max" , 0 );
index.put( "min" , 0 );
index.put( "avg" , 0 );
index.put( "self" , "" );
initial.put(keyColumn[i],
index);
}
}
BasicDBList
resultList = (BasicDBList) coll.group(key, condition,
initial,
reduce, finalize);
return resultList;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//任务统计
@Action (value
= "getTaskStatistic" ,
results = { @Result (name
= "success" ,
type = "json" ,
params = {
"includeProperties" , "jsonResult" })
})
public String
getTaskStatistic() {
DBObject
initial = new BasicDBObject();
DBObject
index = new BasicDBObject();
index.put( "count" , 0 );
index.put( "taskStatus" , "" );
initial.put( "taskStatus" ,
index);
String
reduce = "function
(doc, out) { "
+ "
out.taskStatus.count = out.taskStatus.count+=1; "
+ "
out.taskStatus.inspectStatus = doc.taskStatus;"
+ "}" ;
BasicDBList
group = (BasicDBList) taskStatusService.group( new String[]
{ "taskStatus" }, null ,
initial, reduce, null );
this .jsonResult
= group.toString();
return SUCCESS;
}
|
1
|
[
{ "taskStatus" : { "count" : 4.0 , "taskStatus" : "Finished"}} , { "taskStatus" : { "count" : 3.0 , "taskStatus" : "Received"}} , { "taskStatus" : { "count" : 2.0 , "taskStatus" : "UnReceive"}}]
|
- 1楼lfmilaoshi13分钟前
- 我最近是在使用非结构化数据库,还是在研究非结构化数据库?