`
conkeyn
  • 浏览: 1528974 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

[MongoDB] Aggregate Example

 
阅读更多

统计示例:

引用自:http://icoon22.tistory.com/319

spring-data-mongodb语法:

BasicDBObject cmdBody = new BasicDBObject("aggregate", "productHistory");
ArrayList<BasicDBObject> pipeline = new ArrayList<BasicDBObject>();
String fmt = "yyyyMMddHHmmss";

Date fromDate = Utils.strToDate(StringUtils.defaultString("2013-01-01 00:00:00", Utils.tm2str("DEFAULT", new Date())));
Date toDate    = Utils.strToDate(StringUtils.defaultString("2013-02-28 23:59:59",  Utils.tm2str("DEFAULT", new Date())));

DBObject whereCondition = new BasicDBObject(2);
whereCondition.put("$gte", Utils.formatToDate(fmt, fromDate));
whereCondition.put("$lt", Utils.formatToDate(fmt, toDate));

DBObject receiverCondition = new BasicDBObject();
receiverCondition.put("$eq", new ObjectId(receiver.getId()));

BasicDBObject $where= new BasicDBObject();
$where.append("receiver.$id", receiverCondition);
// $where.append("date", whereCondition);
BasicDBObject $group = new BasicDBObject("_id",  new BasicDBObject("date", "$date"));
$group.append("totalBalance", new BasicDBObject("$sum", "$balance"));
$group.append("totalAmountRecommand", new BasicDBObject("$sum", "$amountRecommand"));

DBObject havingCondition = new BasicDBObject(2);
havingCondition.put("$gte", 304235000);
havingCondition.put("$lte", 404235000);
BasicDBObject $having = new BasicDBObject("totalBalance", havingCondition);

BasicDBObject $sort = new BasicDBObject("_id.date", -1); // -1 : DESC, 1 : ASC

// 옵션 : Result output 를 정의 한다.
BasicDBObject $project = new BasicDBObject();
$project.put("date", 1);
$project.put("totalBalance", 1);
$project.put("totalAmountRecommand", 1);


pipeline.add(new BasicDBObject("$match", $where));
pipeline.add(new BasicDBObject("$group", $group));
pipeline.add(new BasicDBObject("$match", $having));
pipeline.add(new BasicDBObject("$sort", $sort));
pipeline.add(new BasicDBObject("$limit", 5));
pipeline.add(new BasicDBObject("$project", $project));
cmdBody.put("pipeline", pipeline);

System.out.println(cmdBody.toString());

CommandResult cr = mongoOperations.executeCommand(cmdBody.toString());

System.out.println(cr.toString());

 

 翻译成SQL便于习惯思考

select
	 date
	,sum(balance) as totalBalance
	,sum(amountRecommand) as totalAmountRecommand
from productHistory
where date < '20130110000000' and    date > '20130412235959'
group date
having totalBalance <= 304235000 and totalBalance >= 404235000
order by date desc
limit 0, 5

 mongodb中的聚合语句,以下语句通过db.runCommand()函数执行。

{ "aggregate" : "productHistory" , "pipeline" : [
	    { "$match" : { "createDate" : { "$gte" : "20130101000000" , "$lt" : "20130228235959"}}}
	  , { "$group" : {
			 "_id" : { "createDate" : "$createDate"}
			, "totalBalance" : { "$sum" : "$balance"}
			, "totalAmountRecommand" : { "$sum" : "$amountRecommand"}
			}
		}
	  , { "$match" : { "totalBalance" : { "$gte" : 304235000 , "$lte" : 404235000}}}
	  , { "$sort" : { "_id.createDate" : -1}}
	  , { "$limit" : 5}
	  , { "$project" : { "createDate" : 1 , "totalBalance" : 1 , "totalAmountRecommand" : 1}}
 ]}

 聚合结果:

 { "serverUsed" : "/127.0.0.1:27017" , "result" : [
  { "_id" : { "createDate" : "20130228233505"} , "totalBalance" : 392745000 , "totalAmountRecommand" : 130915000}
, { "_id" : { "createDate" : "20130228230757"} , "totalBalance" : 334755000 , "totalAmountRecommand" : 111585000}
, { "_id" : { "createDate" : "20130228225344"} , "totalBalance" : 361920000 , "totalAmountRecommand" : 120640000}
, { "_id" : { "createDate" : "20130228190033"} , "totalBalance" : 395145000 , "totalAmountRecommand" : 131715000}
, { "_id" : { "createDate" : "20130228182751"} , "totalBalance" : 396270000 , "totalAmountRecommand" : 132090000}
 ] , "ok" : 1.0}

 

分享到:
评论

相关推荐

    nodejs-mongodb-example:一些示例代码演示了node.js和mongodb中的某些CRUD操作

    在本项目"nodejs-mongodb-example"中,我们聚焦于使用JavaScript编程语言通过Node.js环境与MongoDB数据库进行交互的示例代码。MongoDB是一种流行的NoSQL数据库,它以JSON格式存储数据,非常适合处理结构不固定或半...

    springboot+mongoDB

    在Spring Boot中,可以通过`Aggregation`类来构建聚合管道,然后调用`MongoTemplate`的`aggregate`方法执行聚合。 **地理空间索引和查询** MongoDB支持地理空间数据,可以创建2D索引并执行地理空间查询。这对于地理...

    mongoDB增删改查+前端页面实现+idea+themlesf+mybatis

    "查"是查询数据,MongoDB提供了丰富的查询语法,如`find()`, `findOne()`, `aggregate()`等。查询所有用户: ```javascript db.users.find(); ``` 接下来,我们关注前端页面的实现。在这个项目中,可能使用了...

    mongodb java测试用例

    MongoDB是一种流行的开源文档型数据库,它以JSON格式存储数据,具有高性能、高可用性和可扩展性。在Java开发中,我们通常使用Java驱动程序来与MongoDB进行交互。本测试用例着重展示了如何在Java环境中操作MongoDB,...

    Laravel开发-mongodb

    return $collection-&gt;aggregate([ ['$group' =&gt; ['_id' =&gt; null, 'averageAge' =&gt; ['$avg' =&gt; '$age']]], ])-&gt;first()['averageAge']; }); ``` 在部署和配置方面,你需要确保MongoDB服务已运行,并在`config/...

    mongodb52demo.zip

    Aggregation aggregation = usersCollection.aggregate(Arrays.asList( new Document("$group", new Document("_id", "$age").append("count", new Document("$sum", 1))) )); aggregation.forEach(printDocument);...

    dome_MongoDB_

    2. **聚合框架**:MongoDB的聚合框架允许对数据进行处理和分析,如`db.users.aggregate([...pipeline])`。 3. **复制集**:为了实现高可用性和故障切换,MongoDB支持复制集,通过`rs.initiate()`初始化复制集。 4....

    mongodb.zip

    email: "john.doe@example.com", age: 30 }); ``` **删(Delete)**: 删除数据使用`deleteOne()`或`deleteMany()`方法。以下是如何删除特定用户的方法: ```javascript db.users.deleteOne({ name: "John Doe" }...

    springboot+mongodb 实现按日期分组分页查询功能

    AggregationResults&lt;BasicDBObject&gt; eatOutputType = mongoTemplate.aggregate(eatAggregation, "inner_cash_change", BasicDBObject.class); ``` 在上面的代码中,我们使用 `Aggregation.newAggregation` 方法来...

    js代码-mongodb 查询

    usersCollection.aggregate([ { $group: { _id: '$gender', count: { $sum: 1 } } }, { $sort: { count: -1 } } ]).toArray((err, results) =&gt; { if (err) throw err; console.log(results); }); ``` 这段代码将...

    net.mongodb

    var user = new User { Name = "John", Email = "john@example.com" }; users.InsertOne(user); ``` 6. **查询操作**:使用LINQ或`MongoDB.Driver`提供的查询API来检索数据。例如,查询所有名字为"John"的用户...

    使用MongoDB,ASP.NET,C#插入更新删除操作

    var pipeline = usersCollection Aggregate() .Count(); var count = await pipeline.SingleOrDefaultAsync(); ``` 在ASP.NET应用程序中,这些操作通常在HTTP请求处理程序或服务层执行,并响应用户的操作。为了...

    mongo-rust-driver:官方的MongoDB Rust驱动程序

    let cursor = collection.aggregate(pipeline, options).await?; for doc in cursor { println!("{:?}", doc.unwrap()); } ``` 为了提高性能,`mongo-rust-driver`实现了批量插入,可以一次性将大量文档写入数据库...

    nodejs-mongodb-crud

    此外,还可以使用`aggregate()`方法进行聚合操作,`countDocuments()`计算文档数量,`distinct()`获取唯一值等。在实际开发中,你还需要处理错误、添加验证规则、优化查询性能等。 总结来说,"nodejs-mongodb-crud...

    practice_mongo:练习使用 MongoDB

    usersCollection.aggregate([ { $group: { _id: '$age', count: { $sum: 1 } } }, { $sort: { _id: 1 } } ]).toArray((err, aggResult) =&gt; { if (err) { console.error('Error aggregating users:', err); } ...

    FlaskPymongo:Flaac和MongoDB Usando驱动程序de flask-PyMongo

    2. **聚合操作**:`aggregate()`方法允许执行MongoDB的聚合框架,进行复杂的数据分析。 3. **索引管理**:通过`create_index()`方法创建索引,提高查询性能。 4. **异步操作**:如果需要在Flask应用中处理异步任务...

    chapter_2_crud.zip_javascript_zip

    读取数据可以通过 `find`、`findOne` 或 `aggregate` 方法完成。比如,查询所有用户: ```javascript collection.find({}).toArray((err, docs) =&gt; { if (err) throw err; console.log('All users:', docs); ...

    pymongolinux安装包

    results = collection.aggregate(pipeline) ``` 这将按照销售类别分组并计算总销售额,然后按销售额降序排序。 在索引管理方面,`pymongo`允许你创建、查看和删除索引,以优化查询性能: ```python db....

    Web-practice-module-46

    聚合操作使用`db.collection.aggregate()`,可以包含多个阶段,如`$match`、`$group`、`$sort`和`$project`。 7. **索引(Indexes)**:索引能显著提高查询性能。使用`db.collection.createIndex()`可以创建索引,...

    mongoose-master.zip

    6. 集合操作:mongoose提供了`aggregate()`方法,用于执行聚合查询,分析和处理大量数据。 在mongoose-master.zip中,包含了mongoose库的源代码,开发者可以通过阅读源码更深入地理解其内部实现机制,包括错误处理...

Global site tag (gtag.js) - Google Analytics