mongodb java 框架_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();

}

}

mongodb-orm简介Mongodb ORM是基于java的ORM框架,简化了SDK的使用,使代码变得更清晰、简单。 与Ibatis类似,将查询、执行语句封装在xml中,与代码隔离。简称MQL。 项目中使用加入mongodb orm的支持包1. 添加jar包或maven支持<dependency>     <groupId>com.mongodborm</groupId>     <artifactId>mongodb-orm</artifactId>     <version>0.0.1-RELEASE</version> </dependency>2. 初始化mongodb templet        spring中初始化<bean id="mongoTemplet" class="com.mongodb.client.MongoClientTemplet">     <property name="factory">         <bean class="com.mongodb.client.MongoORMFactoryBean">             <property name="dataSource">                 <bean class="com.mongodb.client.MongoDataSource">                     <property name="nodeList" value="127.0.0.1:27017" />                     <property name="dbName" value="your db name" />                     <property name="userName" value="user name" />                     <property name="passWord" value="password" /> <!-- 可使用默认值 --> <property name="connectionsPerHost" value="" />                     <property name="threadsAllowedToBlock" value="" />                     <property name="connectionTimeOut" value="" />                     <property name="maxRetryTime" value="" />                     <property name="socketTimeOut" value="" />                 </bean>             </property>             <property name="configLocations">                 <list>                     <value>classpath:mql/mongo-mql.xml</value>                 </list>             </property>         </bean>     </property> </bean>        代码初始化    try {       Resource resource =  new ClassPathResource("mongo-mql.xml");           MongoORMFactoryBean factory = new MongoORMFactoryBean();       factory.setConfigLocations(new Resource[]{resource});       factory.init();          MongoClientTemplet templet = new MongoClientTemplet();       templet.setFactory(factory);       templet.init();     } catch(Exception e) {       e.printStackTrace();     }编写MQLMapping<mapping id="model" class="test.mongodborm.Model">         <property column="_id" name="id" />         <property column="name" name="name" />         <property column="time" name="time" value="0" />         <property column="status" name="status" /> </mapping> <mapping id="extendModel" class="test.mongodborm.Model" extends="model">     <property column="newProperty" name="newProperty" /> </mapping>  select<select id="queryModelList" collection="test_sample">     <query class="java.lang.String">         <property column="name" name="${value}" />     </query>     <field mapping="model" />     <order>         <property column="time" value="desc" />     </order> </select> update/findAndModify<update id="updateModel" collection="test_sample">     <query class="test.mongodborm.Model$Child">         <property column="name" name="name" ignoreNull="true" />         <property column="time" operate="gte" value="0" type="number" />         <property column="status" operate="in">             <list type="number">0,1</list>         </property>     </query>     <action class="java.util.Map">         <property column="name" name="name" operate="set" />         <property column="status" operate="set" />     </action> </update>有嵌套的查询<select id="queryModelList3" collection="test_sample">     <query class="java.lang.String">         <property column="_id" value="${value}" />         <property column="time" value="0" type="number" />     </query>     <field class="java.util.Map">         <property column="name" name="name" />         <property column="parent" name="parent">             <value class="test.mongodborm.Model$Parent">                 <property column="name" name="name" />                 <property column="child" name="child">                     <value class="test.mongodborm.Model$Child">                         <property column="name" name="name" />                         <property column="time" name="time" value="0" />                     </value>                 </property>                 <property column="data" name="data">                     <value class="java.util.Map">                         <property column="title" name="title" />                         <property column="content" name="content" />                     </value>                 </property>             </value>         </property>         <property column="data" name="data">             <value class="java.util.Map">                 <property column="title" name="title" />                 <property column="content" name="content" />             </value>         </property>     </field>     <order class="java.util.Map">         <property column="time" name="time" value="desc" />     </order> </select>Templet用法Model model = mongoTemplet.findOne("queryModelList", "yuxiangping"); List<Model> list = mongoTemplet.findOne("queryModelList", ""); Model model = new Model(); model.setTime(1L); Map<String, String> action = new HashMap<String, String>(); action.put("name", "yuxiangping-update"); int update = mongoT emplet.update("updateModel", model, action);        更多的使用方法参见 sample.xml 标签:Mongodb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值