mongodb java driver 聚合框架

Mongo 2.2.0版本介绍了mongo的聚合框架,该框架可以很方便的实现一些聚合操作,例如计数、取和、计算平均值。框架使用C++编写,支持多线程,可以很好的跨平台。下面是一个mongod java driver的一个简单的例子。


/*
* 注意聚合需要mongo版本在2.2往上,如果mongo版本比较低,会报MongoDB Java driver : no such cmd: aggregate的错误。
* 下面附上mongo官方手册:http://docs.mongodb.org/manual/contents/
* 这个地址列出了mongo支持的所有查询与聚合命令:http://docs.mongodb.org/manual/reference/operator/
* 这个地址列出了shell支持的所有函数:http://docs.mongodb.org/manual/reference/method/
*/
package com.yeetrack.mongodb.test;
import java.net.UnknownHostException;

import com.mongodb.AggregationOutput;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;

public class MyMongdbAggregation
{

/**
* Java Driver and Aggregation Framework
* @author youthflies
* @throws UnknownHostException
* 注意聚合需要mongo版本在2.2往上,如果mongo版本比较低,会报MongoDB Java driver : no such cmd: aggregate的错误。
* 下面附上mongo官方手册:http://docs.mongodb.org/manual/contents/
* 这个地址列出了mongo支持的所有查询与聚合命令:http://docs.mongodb.org/manual/reference/operator/
* 这个地址列出了shell支持的所有函数:http://docs.mongodb.org/manual/reference/method/
*/
public static void main(String[] args) throws UnknownHostException
{
// TODO Auto-generated method stub
MongoClient mongoClient = new MongoClient("192.22.219.163", 27017);
DB db = mongoClient.getDB("mydb");
DBCollection collection = db.getCollection("expenses");

// //创建数据
// String department = "Sales";
// for(int i=1;i<=15;i++)
// {
// if(i==6)
// department = "egineering";
// if(i==11)
// department = "Human";
// BasicDBObject basicDBObject = new BasicDBObject("employee", i).
// append("department", department).
// append("amount", i*2+1).
// append("type", "airfare");
// collection.insert(basicDBObject);
//
// }
//首先利$match筛选出type为airfate的行
DBObject match = new BasicDBObject("$match", new BasicDBObject("type", "airfare") );

// 利用$project拼装需要的数据,包含department列、amount列和id列
DBObject fields = new BasicDBObject("department", 1);
fields.put("amount", 1);
fields.put("_id", 0);
DBObject project = new BasicDBObject("$project", fields );

// 对上面的project利用group分组
DBObject groupFields = new BasicDBObject( "_id", "$department");
groupFields.put("average", new BasicDBObject( "$avg", "$amount"));
DBObject group = new BasicDBObject("$group", groupFields);

// run aggregation
AggregationOutput output = collection.aggregate( match, project, group );
System.out.println(output);

mongoClient.close();

}

}
版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=649