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

MongoDB Java实现多字段(System、subsystem)组合去重查询

MongoDB Java实现System与subsystem组合去重查询

方法一:聚合框架(推荐)

通过$group阶段按System和subsystem字段分组,实现组合去重,是性能最优的方案。

依赖准备(Maven)

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.11.1</version> <!-- 替换为最新稳定版 -->
</dependency>

Java代码示例

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Aggregates;
import com.mongodb.client.model.Projections;
import org.bson.Document;

import java.util.Arrays;

public class MongoCombinedDistinct {
    public static void main(String[] args) {
        // 建立MongoDB连接
        try (MongoClient client = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase db = client.getDatabase("your_db_name"); // 替换为实际数据库名
            MongoCollection<Document> coll = db.getCollection("your_coll_name"); // 替换为实际集合名

            // 构建聚合管道
            coll.aggregate(Arrays.asList(
                    // 按System和subsystem的组合分组
                    Aggregates.group(Arrays.asList("$System", "$subsystem"),
                            Projections.fields(
                                    Projections.computed("System", "$_id.0"),
                                    Projections.computed("subsystem", "$_id.1")
                            )),
                    // 移除自动生成的_id字段
                    Aggregates.project(Projections.excludeId())
            )).forEach(resultDoc -> {
                // 输出去重后的组合
                System.out.printf("System: %s, subsystem: %s%n",
                        resultDoc.getString("System"),
                        resultDoc.getString("subsystem"));
            });
        }
    }
}

代码说明

  • $group阶段以[System, subsystem]作为分组键,确保只有两个字段完全匹配的文档才会被合并
  • 通过Projections.computed从分组ID中提取原始字段,最后移除冗余的_id,返回结构清晰的结果

方法二:distinct简化方案

如果不需要复杂聚合逻辑,可直接用distinct方法获取字段组合的唯一值(MongoDB 3.2+支持):

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

public class MongoDistinctCombined {
    public static void main(String[] args) {
        try (MongoClient client = MongoClients.create("mongodb://localhost:27017")) {
            MongoDatabase db = client.getDatabase("your_db_name");
            MongoCollection<Document> coll = db.getCollection("your_coll_name");

            // 指定要去重的字段组合
            Document distinctFields = new Document("System", 1).append("subsystem", 1);
            // 查询唯一组合并遍历输出
            coll.distinct("", distinctFields, Document.class).forEach(doc -> {
                System.out.printf("System: %s, subsystem: %s%n",
                        doc.getString("System"),
                        doc.getString("subsystem"));
            });
        }
    }
}

内容的提问来源于stack exchange,提问作者vk l

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:56:06