MongoDB 分组聚合 Aggregation in Java

MongoDB 是一个流行的开源 NoSQL 数据库,它提供了聚合(Aggregation)框架来处理和分析数据。聚合操作是 MongoDB 中非常有用且强大的功能,它允许你对集合中的文档进行多个操作,如分组、筛选、排序、计数等,以便获取所需的结果。本文将重点介绍如何在 Java 中使用 MongoDB 的聚合功能。

安装 MongoDB 驱动

在开始之前,我们需要安装 MongoDB 的 Java 驱动。你可以从 Maven 中央仓库中获取 MongoDB 驱动的最新版本。将以下 Maven 依赖项添加到你的项目的 pom.xml 文件中:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.12.9</version>
</dependency>

连接到 MongoDB 数据库

在使用 MongoDB 聚合之前,我们首先需要连接到 MongoDB 数据库。你可以使用 MongoClient 类来建立连接。以下是一个示例:

import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

public class MongoDBExample {
    public static void main(String[] args) {
        // 连接到 MongoDB 服务器
        MongoClient mongoClient = new MongoClient("localhost", 27017);

        // 选择数据库
        MongoDatabase database = mongoClient.getDatabase("mydb");

        // 选择集合
        MongoCollection<Document> collection = database.getCollection("mycollection");
        
        // 在这里进行聚合操作
    }
}

聚合操作示例

接下来,让我们来看一些常见的聚合操作示例。

分组操作

分组操作允许你按照指定的字段对文档进行分组。以下是一个示例,通过分组操作计算每个城市的平均年龄:

import static com.mongodb.client.model.Accumulators.*;
import static com.mongodb.client.model.Aggregates.*;
import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Projections.*;

List<Document> pipeline = Arrays.asList(
        group("$city", avg("averageAge", "$age"))
);

AggregateIterable<Document> result = collection.aggregate(pipeline);
for (Document doc : result) {
    System.out.println(doc.toJson());
}

筛选操作

筛选操作允许你根据指定的条件过滤文档。以下是一个示例,筛选年龄大于 30 的文档:

List<Document> pipeline = Arrays.asList(
        match(gt("age", 30))
);

AggregateIterable<Document> result = collection.aggregate(pipeline);
for (Document doc : result) {
    System.out.println(doc.toJson());
}

排序操作

排序操作允许你按照指定的字段对文档进行排序。以下是一个示例,按照年龄降序排列文档:

List<Document> pipeline = Arrays.asList(
        sort(descending("age"))
);

AggregateIterable<Document> result = collection.aggregate(pipeline);
for (Document doc : result) {
    System.out.println(doc.toJson());
}

计数操作

计数操作允许你计算文档的数量。以下是一个示例,计算年龄大于 30 的文档数量:

List<Document> pipeline = Arrays.asList(
        match(gt("age", 30)),
        count("count")
);

AggregateIterable<Document> result = collection.aggregate(pipeline);
for (Document doc : result) {
    System.out.println(doc.toJson());
}

总结

通过使用 MongoDB 的聚合框架,我们可以灵活地对文档进行分组、筛选、排序和计数等操作,以满足不同的需求。本文介绍了如何在 Java 中使用 MongoDB 的聚合功能,并提供了一些示例代码供参考。希望本文能够帮助你理解和使用 MongoDB 的聚合功能。

表格

下表列出了一些常用的聚合操作符:

聚合操作符 描述
$group 对文档进行分组
$match 筛选满足条件的文档
$sort 对文档进行排序
$count 计算文档的数量
$avg 计算字段的平均值