Java如何进行MongoDB的聚合操作,如计数、求和、平均值等
要在Java中执行MongoDB的聚合操作,你需要使用MongoDB的Java驱动程序。此驱动程序称为"mongodb-driver",可以通过Maven或Gradle进行依赖管理。
以下是一个使用Java进行MongoDB聚合操作的完整示例代码:
1. Maven 依赖
<dependencies>
...
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.4.1</version>
</dependency>
...
</dependencies>
请根据你使用的MongoDB版本更新驱动程序版本。
2. Java 代码示例
import com.mongodb.ConnectionString;
import com.mongodb.client.*;
import org.bson.Document;
import static com.mongodb.client.model.Accumulators.*;
import static com.mongodb.client.model.Aggregates.*;
import static com.mongodb.client.model.Filters.*;
public class MongoDBAggregationExample {
public static void main(String[] args) {
// MongoDB 连接字符串
String connectionString = "mongodb://localhost:27017/?readPreference=primary&appname=MongoDB%20Compass&ssl=false";
// 创建 MongoDB 客户端
MongoClient mongoClient = MongoClients.create(new ConnectionString(connectionString));
// 获取数据库对象
MongoDatabase database = mongoClient.getDatabase("test");
// 获取集合对象
MongoCollection<Document> collection = database.getCollection("students");
// 使用聚合操作进行计数
long count = collection.countDocuments();
System.out.println("Total documents count: " + count);
// 使用聚合操作进行求和
AggregateIterable<Document> sumResult = collection.aggregate(
List.of(group(null, sum("totalScore", "$score")))
);
Document sumDocument = sumResult.first();
int totalScore = sumDocument.getInteger("totalScore");
System.out.println("Total score sum: " + totalScore);
// 使用聚合操作进行平均值计算
AggregateIterable<Document> avgResult = collection.aggregate(
List.of(group(null, avg("averageScore", "$score")))
);
Document avgDocument = avgResult.first();
double averageScore = avgDocument.getDouble("averageScore");
System.out.println("Average score: " + averageScore);
// 关闭 MongoDB 连接
mongoClient.close();
}
}
在此示例中,我们假设在MongoDB的"test"数据库中有一个名为"students"的集合。
这个示例执行了聚合操作来计数文档数量、求和和计算平均值。
MongoDB 集合 "students" 示例文档:
json
{ "_id" : ObjectId("610f17d78096d61001a0caaf"), "name" : "Alice", "score" : 80 }
{ "_id" : ObjectId("610f17d78096d61001a0cab0"), "name" : "Bob", "score" : 75 }
{ "_id" : ObjectId("610f17d78096d61001a0cab1"), "name" : "Charlie", "score" : 90 }
{ "_id" : ObjectId("610f17d78096d61001a0cab2"), "name" : "David", "score" : 85 }
此示例在控制台输出以下内容:
Total documents count: 4
Total score sum: 330
Average score: 82.5
以上示例基于MongoDB Java驱动程序v4.4.1进行开发,可以根据你当前使用的版本进行相应的更改。