You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MongoDB的AggregateIterable<Document>映射为Java POJO并转为ArrayList

将MongoDB聚合结果映射到自定义POJO并转换为ArrayList

1. 确保POJO映射支持

如果使用原生MongoDB驱动,需先注册POJO编解码器,让驱动能自动将Document转换为你的ODSMongo类:

// 注册POJO编解码器
CodecRegistry codecRegistry = CodecRegistries.fromRegistries(
    MongoClientSettings.getDefaultCodecRegistry(),
    CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build())
);

// 创建带POJO支持的MongoClient
MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder()
    .codecRegistry(codecRegistry)
    .build());

// 获取指定泛型的集合(可选,更规范)
MongoCollection<ODSMongo> collection = mongoClient.getDatabase("你的数据库名").getCollection("myCollection", ODSMongo.class);

如果使用Spring Data MongoDB,框架会自动配置POJO映射,无需额外注册编解码器。

2. 处理聚合结果并转换为ArrayList

你的聚合结果中,每个返回的Document包含docs数组,数组内的元素正好匹配ODSMongo的结构。只需遍历数组,将每个Document转为ODSMongo对象,再收集到ArrayList中即可。

方式一:传统迭代写法

List<ODSMongo> odsmongoList = new ArrayList<>();
Iterator<Document> iterator = output.iterator();

while (iterator.hasNext()) {
    Document resultDoc = iterator.next();
    // 取出docs数组
    List<Document> docs = resultDoc.getList("docs", Document.class);
    // 遍历数组,转换为POJO并添加到集合
    for (Document doc : docs) {
        ODSMongo odsmongo = doc.to(ODSMongo.class);
        odsmongoList.add(odsmongo);
    }
}

方式二:Java 8 Stream简化写法

import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

// 将AggregateIterable转为Stream,扁平化处理docs数组,再映射为POJO
List<ODSMongo> odsmongoList = StreamSupport.stream(output.spliterator(), false)
    .map(resultDoc -> resultDoc.getList("docs", Document.class))
    .flatMap(List::stream)
    .map(doc -> doc.to(ODSMongo.class))
    .collect(Collectors.toCollection(ArrayList::new));

3. 获取POJO字段值

转换完成后,直接通过ODSMongo的getter方法访问对应字段值:

for (ODSMongo item : odsmongoList) {
    System.out.println("ID: " + item.get_id());
    System.out.println("Key: " + item.getKey());
    System.out.println("最高索引: " + item.getHighestIndex());
    // 其他字段同理调用getter方法
}

注意事项

  • 你的聚合管道中没有返回projectKey字段,因此转换后的ODSMongo对象中projectKey属性会为null,若需要该字段,需修改聚合的$push阶段,添加"projectKey": "$projectKey"。
  • 确保ODSMongo类的字段名与MongoDB文档中的字段名完全匹配(如POJO中的Key对应文档的Key),若字段名不一致,需使用@Field注解指定映射关系。

内容的提问来源于stack exchange,提问作者Chinmay Chikode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:40:43