JAVA mongodb 聚合查询

 区分先后条件顺序,这是个坑!

 /**
     * 测试聚合
     */
    @Test
    public void testAggregation() {
        String format_DateTime = "yyyy-MM-dd HH:mm:ss";
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format_DateTime);
        LocalDateTime localDateTime = LocalDateTime.parse("2023-11-23 12:13:08", df);

        LocalDateTime endTime = LocalDateTime.parse("2022-11-23 12:13:08", df);

//        Query query = new Query();
//        query.fields().exclude("_id");
        Criteria criteria = Criteria.where("name").is("a");
//        criteria.andOperator(
//            Criteria.where("time").gte(localDateTime),
//            Criteria.where("time").lte(endTime));
//        query.addCriteria(criteria);

        AggregationOperation match = Aggregation.match(criteria);
      
        List<AggregationOperation> operations = new ArrayList<>();
        operations.add(match); //区分先后条件顺序,这是个坑!
        operations.add(Aggregation.group("sex")/*.first("equipmentId").as("equipmentId")*/
            .sum("sex").as("sex")
            .sum("age").as("age")
        );
        Aggregation aggregation = Aggregation.newAggregation(operations);
        AggregationResults<Document> aggregate = mongoTemplate.aggregate(aggregation, "c3", Document.class);
        List<Document> mappedResults = aggregate.getMappedResults();
        log.debug("BaBiaoChongQingCeBaoYiQuery 聚合合计查询结果 {}", JSONUtil.toJsonStr(aggregate));
        System.out.println("-----------------" + (CollectionUtils.isEmpty(mappedResults) ? null : mappedResults.get(0)));
        System.out.println("==============" + mappedResults);
    }

Java 中操作 MongoDB 进行聚合查询可以使用 MongoDBJava 驱动程序。下面是一个简单的示例代码,它演示了如何使用 Java 驱动程序执行 MongoDB 聚合查询: ```java import com.mongodb.MongoClient; import com.mongodb.client.AggregateIterable; import com.mongodb.client.MongoDatabase; import org.bson.Document; import java.util.Arrays; public class MongoDBAggregationExample { public static void main(String[] args) { // 创建 MongoDB 客户端 MongoClient mongoClient = new MongoClient("localhost", 27017); // 获取数据库 MongoDatabase database = mongoClient.getDatabase("test"); // 执行聚合查询 AggregateIterable<Document> result = database.getCollection("sales").aggregate(Arrays.asList( new Document("$group", new Document("_id", "$product").append("total", new Document("$sum", "$quantity"))), new Document("$sort", new Document("total", -1)) )); // 打印结果 for (Document doc : result) { System.out.println(doc.toJson()); } // 关闭客户端 mongoClient.close(); } } ``` 在这个示例中,我们创建了一个 `MongoClient` 对象来连接 MongoDB 数据库。然后,我们获取了 `test` 数据库,并对 `sales` 集合执行了一个聚合查询。这个聚合查询使用了 `$group` 和 `$sum` 操作符来计算每个产品的总销量,并使用 `$sort` 操作符按降序排列结果。最后,我们遍历了查询结果并打印了每个文档的 JSON 表示。 需要注意的是,聚合查询返回的结果是一个 `AggregateIterable<Document>` 对象,可以通过迭代器来遍历结果集合。在遍历结果时,可以使用 `toJson()` 方法将每个文档转换为 JSON 格式的字符串,或者使用 `get()` 方法获取文档中的字段值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值