统计示例:
引用自: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"中,我们聚焦于使用JavaScript编程语言通过Node.js环境与MongoDB数据库进行交互的示例代码。MongoDB是一种流行的NoSQL数据库,它以JSON格式存储数据,非常适合处理结构不固定或半...
在Spring Boot中,可以通过`Aggregation`类来构建聚合管道,然后调用`MongoTemplate`的`aggregate`方法执行聚合。 **地理空间索引和查询** MongoDB支持地理空间数据,可以创建2D索引并执行地理空间查询。这对于地理...
"查"是查询数据,MongoDB提供了丰富的查询语法,如`find()`, `findOne()`, `aggregate()`等。查询所有用户: ```javascript db.users.find(); ``` 接下来,我们关注前端页面的实现。在这个项目中,可能使用了...
MongoDB是一种流行的开源文档型数据库,它以JSON格式存储数据,具有高性能、高可用性和可扩展性。在Java开发中,我们通常使用Java驱动程序来与MongoDB进行交互。本测试用例着重展示了如何在Java环境中操作MongoDB,...
return $collection->aggregate([ ['$group' => ['_id' => null, 'averageAge' => ['$avg' => '$age']]], ])->first()['averageAge']; }); ``` 在部署和配置方面,你需要确保MongoDB服务已运行,并在`config/...
Aggregation aggregation = usersCollection.aggregate(Arrays.asList( new Document("$group", new Document("_id", "$age").append("count", new Document("$sum", 1))) )); aggregation.forEach(printDocument);...
2. **聚合框架**:MongoDB的聚合框架允许对数据进行处理和分析,如`db.users.aggregate([...pipeline])`。 3. **复制集**:为了实现高可用性和故障切换,MongoDB支持复制集,通过`rs.initiate()`初始化复制集。 4....
email: "john.doe@example.com", age: 30 }); ``` **删(Delete)**: 删除数据使用`deleteOne()`或`deleteMany()`方法。以下是如何删除特定用户的方法: ```javascript db.users.deleteOne({ name: "John Doe" }...
AggregationResults<BasicDBObject> eatOutputType = mongoTemplate.aggregate(eatAggregation, "inner_cash_change", BasicDBObject.class); ``` 在上面的代码中,我们使用 `Aggregation.newAggregation` 方法来...
usersCollection.aggregate([ { $group: { _id: '$gender', count: { $sum: 1 } } }, { $sort: { count: -1 } } ]).toArray((err, results) => { if (err) throw err; console.log(results); }); ``` 这段代码将...
var user = new User { Name = "John", Email = "john@example.com" }; users.InsertOne(user); ``` 6. **查询操作**:使用LINQ或`MongoDB.Driver`提供的查询API来检索数据。例如,查询所有名字为"John"的用户...
var pipeline = usersCollection Aggregate() .Count(); var count = await pipeline.SingleOrDefaultAsync(); ``` 在ASP.NET应用程序中,这些操作通常在HTTP请求处理程序或服务层执行,并响应用户的操作。为了...
let cursor = collection.aggregate(pipeline, options).await?; for doc in cursor { println!("{:?}", doc.unwrap()); } ``` 为了提高性能,`mongo-rust-driver`实现了批量插入,可以一次性将大量文档写入数据库...
此外,还可以使用`aggregate()`方法进行聚合操作,`countDocuments()`计算文档数量,`distinct()`获取唯一值等。在实际开发中,你还需要处理错误、添加验证规则、优化查询性能等。 总结来说,"nodejs-mongodb-crud...
usersCollection.aggregate([ { $group: { _id: '$age', count: { $sum: 1 } } }, { $sort: { _id: 1 } } ]).toArray((err, aggResult) => { if (err) { console.error('Error aggregating users:', err); } ...
2. **聚合操作**:`aggregate()`方法允许执行MongoDB的聚合框架,进行复杂的数据分析。 3. **索引管理**:通过`create_index()`方法创建索引,提高查询性能。 4. **异步操作**:如果需要在Flask应用中处理异步任务...
读取数据可以通过 `find`、`findOne` 或 `aggregate` 方法完成。比如,查询所有用户: ```javascript collection.find({}).toArray((err, docs) => { if (err) throw err; console.log('All users:', docs); ...
results = collection.aggregate(pipeline) ``` 这将按照销售类别分组并计算总销售额,然后按销售额降序排序。 在索引管理方面,`pymongo`允许你创建、查看和删除索引,以优化查询性能: ```python db....
聚合操作使用`db.collection.aggregate()`,可以包含多个阶段,如`$match`、`$group`、`$sort`和`$project`。 7. **索引(Indexes)**:索引能显著提高查询性能。使用`db.collection.createIndex()`可以创建索引,...
6. 集合操作:mongoose提供了`aggregate()`方法,用于执行聚合查询,分析和处理大量数据。 在mongoose-master.zip中,包含了mongoose库的源代码,开发者可以通过阅读源码更深入地理解其内部实现机制,包括错误处理...