db.collection.aggregate([
		$project: {date: {$dateToString: {format: "%Y-%m-%d", date: "$createTime"}}}
    {$group: {_id: "$date", count: {$sum: 1}}},
    {$project: {count: 1, _id: 0, date: "$_id"}},
    {$sort: {"date": 1}}

对应的 java 实现:

Aggregation aggregation = Aggregation.newAggregation(
	Aggregation.project("createTime").and(DateOperators.DateToString.dateOf("createTime").toString("%Y-%m-%d")).as("date"),
	Aggregation.group("date").count().as("count"),
	Aggregation.project("date", "count").and("date").previousOperation(),
	Aggregation.sort(Sort.Direction.ASC, "date")
AggregationResults<StatisticDayDTO> result = mongoTemplate.aggregate(aggregation, collectionName, StatisticDayDTO.class);
List<StatisticDayDTO> list = result.getMappedResults();

代码解释:

project:显示哪几个字段,这里显示createTime字段,and..as是把and后的字段重命名为as后的字段,这里把createTime处理后重命名为date
group:分组操作,这里按date分组,计算数量,结果数量重命名为count
第二个project:previousOperation方法是把_id重命名为date(也就是别名)
sort:结果按照date正序排序
collectionName: 集合名称

为了更好的理解and…previousOperation方法的含义,这里解释下:

去掉第二个project,结果形如[{"count": 3, "_id": "2019-12-13"}]
加上第二个project,结果形如[{"count": 3, "date": "2019-12-13"}]
接触mongo也有段时间了,在进行功能研发时经常用到mongo聚合查询,所以想整理一下mongo常用的聚合查询的函数,以及在java中实现的语法。也便于以后做一些简单的查询时有个例子可以参考 (fu zhi)。很多复杂的查询都是从简单的部分组合的,同时查询很多内容的话,用聚合管道进行字段筛选之后,再...
 //criteria 查询内容
                Aggregation.match(criteria),
                Aggregation.project("date").andExclude("_id").andExpression("{$dateToString:{format:'%Y
                                    今天练习在java中使用mongodb,进行分组,刚开始没有思路,后来通过查资料,大概写了一个demo,以下是分组在java中用到的group分组代码:
这是mongodb中的数据:
这是java中的代码:
String[] field = {"teacher_name","teacher_synopsis"}; 		//分组的依据,根据那些参数进行分组
Aggregation aggregat...
 public int syncTotal(Date startTime, Date endTime) {
        int result = 0;
        Criteria criteria = new Criteria().andOperator(Criteria.where("data_time").gte(startTime), Criteria.where("data_time").lte(endTime));
        //创建aggreation
                                    本文详细记录使用Aggregation聚合框架对MongoDB数据库的常见操作,包含筛选project、过滤match、排序sort、分组group by、略过skip、限制limit和分页查询设计思路等等,文中仍然有部分地方未能够充分理解,如_id一直保持展示的状态,尽管经过project筛选,后期补充。相比较与MongoTemplate操作,Aggregation聚合操作更加便捷、代码更加简洁。
在工作的过程中,使用MongoDB存储业务数据,有时候想做的不仅仅是将数据从MongoDB中提取出来,可能需要对数据进行分析并加以利用。在党费收缴模块开发过程中,需要根据党支部名称进行分组统计出党支部内人员的数目,每个党支部应缴党费和实缴党费的总和 等统计信息。
由于spring-data-mongodb-1.9.5.RELEASE版本太低,因此在调用mongoTemplate类型的a...
                                    1.$match 定义查询条件db.collection.aggregate({"$match":{"merchno" : "1561985080187","createTime": {$lte:ISODate("2019-07-03T15:59:59.000Z"),$gte: ISODate("2019-07-02T16:00:00.000Z")}}})对应的mongoTemplate 写法Ag...
                                    我们在分片集群的情况下,有时候通过mongoTemplate.count()并未获取到正确的数量。我们通过mongoTemplate.aggregate()方法来获取到到总的数量。
 Query query2 = new Query();
        Criteria criteria =new Criteria();
        List<String> valueStrPa...
                                    最近开发医院表单系统,表单数据存入mongodb,需要根据某一字段进行统计,然而存取的内容字段是不确定的,统计的话不能按照创建实体类那样进行查询统计,先开始使用 Aggregation进行统计是没有问题的,本地测试通过,代码如下
Aggregation aggregation  = Aggregation.newAggregation("groupField").count().as("va