Mongodb复杂聚合统计查询与java示例

mongodb复杂聚合统计

db.test_domo.aggregate([
 {
    $match:{
		  createTime:{$gte:"2020-02-20"}
		}
 },
  {
    $group: {
        _id: {
            userId: "$userId",
            dateTime: "$dateTime",
            code: "$code"
        },
        count_01: {
            "$sum": "$count_01"
        },
		count_02: {
            "$sum": "$count_02"
        }
    }
}, {
    $project: {
        _id: 0,
        userId: "$_id.userId",
        dateTime: "$_id.dateTime",
		code: "$_id.code",
		count_01: 1,
		count_02: 1
    }
},{
	$sort:{
	   code: -1,
       dateTime: -1
	}
}])

java示例(示例参数与上述语句参数不同,但是实现类似)

List<BasicDBObject> basicDBObjectList = new ArrayList<>();

BasicDBObject $match = new BasicDBObject();
$match.put("$match", new BasicDBObject().append("hourTime", new BasicDBObject().append("$gte", startTime).append("$lte",endTime)));

basicDBObjectList.add($match);

BasicDBObject $group = new BasicDBObject();
$group.put("$group",  new BasicDBObject().append("_id", "$hourTime").append("num_tutorial", new BasicDBObject("$sum", "$opTotal")));
basicDBObjectList.add($group);

BasicDBObject $project = new BasicDBObject();
$project.put("$project",  new BasicDBObject().append("_id", false).append("hourTime", "$_id").append("opTotal", "$num_tutorial"));


basicDBObjectList.add($project);

BasicDBObject $sort = new BasicDBObject();
$sort.put("$sort", new BasicDBObject().append("hourTime", 1));
basicDBObjectList.add($sort);

AggregateIterable<Document> documentAggregateIterable = mongoTemplate.getCollection(COLLECTION_NAME).aggregate(basicDBObjectList);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java 中使用 MongoDB 聚合查询非常简单,可以使用 MongoDB 的官方 Java 驱动程序来实现。以下是几种常见的 MongoDB 聚合查询方式: 1. 使用 Aggregation 类 Aggregation 类是 MongoDB 官方 Java 驱动程序中的一个类,用于构建聚合查询。它提供了多个方法来实现聚合查询,如 match()、group()、sort() 等。下面是一个简单的聚合查询示例: ``` MongoClient mongoClient = new MongoClient(); MongoDatabase database = mongoClient.getDatabase("mydb"); MongoCollection<Document> collection = database.getCollection("mycoll"); AggregateIterable<Document> iterable = collection.aggregate( Arrays.asList( Aggregates.match(Filters.eq("status", "A")), Aggregates.group("$cust_id", sum("total", "$amount")) ) ); for (Document document : iterable) { System.out.println(document); } ``` 2. 使用 Pipeline 类 Pipeline 类是 Aggregation 类的一个子类,它提供了更多的方法来构建聚合查询,如 limit()、skip()、unwind() 等。下面是一个使用 Pipeline 类的聚合查询示例: ``` MongoClient mongoClient = new MongoClient(); MongoDatabase database = mongoClient.getDatabase("mydb"); MongoCollection<Document> collection = database.getCollection("mycoll"); List<Bson> pipeline = Arrays.asList( match(eq("status", "A")), group("$cust_id", sum("total", "$amount")) ); AggregateIterable<Document> iterable = collection.aggregate(pipeline); for (Document document : iterable) { System.out.println(document); } ``` 3. 使用 Aggregates 静态导入类 如果你使用的是 Java 8 或更高版本,可以使用静态导入 Aggregates 类来简化聚合查询的代码。下面是一个使用静态导入 Aggregates 类的聚合查询示例: ``` MongoClient mongoClient = new MongoClient(); MongoDatabase database = mongoClient.getDatabase("mydb"); MongoCollection<Document> collection = database.getCollection("mycoll"); List<Bson> pipeline = Arrays.asList( match(eq("status", "A")), group("$cust_id", sum("total", "$amount")) ); AggregateIterable<Document> iterable = collection.aggregate(pipeline); for (Document document : iterable) { System.out.println(document); } ``` 这些都是常见的 MongoDB 聚合查询方式,你可以根据自己的需求选择最适合的方式来实现聚合查询

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值