gpt4 book ai didi

java - 使用聚合从 Mongo 集合中获取平均值

转载 作者:行者123 更新时间:2023-11-30 02:45:30 25 4
gpt4 key购买 nike

我正在尝试学习如何在 Java 中使用 Mongo,并且已经能够进行一些简单的查询,但我在聚合运算符方面遇到了麻烦。

文档结构很简单,如下:

{
"_id" : ObjectId("57dbe94f0507a4d8710ac5b2"),
"name" : "Name1",
"age" : 23
}
{
"_id" : ObjectId("57dbe9750507a4d8710ac5b3"),
"name" : "Name2",
"age" : "String for examble"
}
{
"_id" : ObjectId("57dbee630507a4d8710ac5b5"),
"name" : "Name3",
"age" : 24
}

我想做的就是获取集合中年龄的平均值(名称示例)。

只需使用 mongo,我就可以通过以下咨询获得理想的结果:

db.example.aggregate([
{
$group: {
_id: null,
averageAge: { $avg: "$age" }
}
}
]);

我尝试过以下方法:

BasicDBObject groupFields = new BasicDBObject("_id", "null");
BasicDBObject media = new BasicDBObject("$avg", "$age");
groupFields.put("mediaIdade", media);
BasicDBObject group = new BasicDBObject("$group", groupFields );
AggregateIterable<org.bson.Document> agregate = db.getCollection("exemplo").aggregate(Arrays.asList (group));

这几乎是直接翻译,但得到了 "java.lang.NoSuchMethodError: org.bson.codecs.BsonTypeClassMap.keys()Ljava/util/Set;" ,这并不奇怪。

但我无法将其翻译成 Java。我查了一下,发现 this question 但由于使用了$unwind等操作符而无法理解。因此,我尝试使查询尽可能简单,以便更好地理解 Java 聚合框架的工作原理。

有人可以帮忙吗?

最佳答案

尝试这样的事情。

MongoCollection<Document> dbCollection = db.getCollection("example", Document.class);
AggregateIterable<org.bson.Document> aggregate = dbCollection.aggregate(Arrays.asList(Aggregates.group("_id", new BsonField("averageAge", new BsonDocument("$avg", new BsonString("$age"))))));
Document result = aggregate.first();
double age = result.getDouble("averageAge");

输入:

{ "_id" : ObjectId("58136d6ed96cc299c224d529"), "name" : "Name1", "age" : 23 }
{ "_id" : ObjectId("58136d6ed96cc299c224d52a"), "name" : "Name2", "age" : 26 }
{ "_id" : ObjectId("58136d6ed96cc299c224d52b"), "name" : "Name3", "age" : 24 }

输出:

24.333333333333332

关于java - 使用聚合从 Mongo 集合中获取平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com