java - MongoDB嵌入数组属性平均值(使用Java和MongoJack)

标签 java mongodb mongojack database nosql

我有一个名为“Restaurants”的集合,如下所示:

   {
     "_id" : ObjectId("51236fbc3004f02f87c62e8e"),
     "name" : "Some very fancy name"
      reviews: [
        {"id" : 1,
         "text" : "saffas"
         "rating" : 3,
        }
        {"id" : 2,
         "text" : "fsafasfas"   
         "rating" : 4,
        }
    ]
}

我想获得该餐厅所有评论的平均评分。我该如何做到这一点(我使用 Java)?

最佳答案

运行以下聚合管道来获取餐厅的平均评分:

<小时/>

Mongo shell

var pipeline = [
    { "$unwind": "$reviews" },
    {
        "$group": {
            "_id": "$name",
            "avg_rating": { "$avg": "$reviews.rating" }
        }
    }
]

db.Restaurants.aggregate(pipeline);

这可以翻译为 Java:

<小时/>

Java测试实现

public class JavaAggregation {
    public static void main(String args[]) throws UnknownHostException {

        MongoClient mongo = new MongoClient();
        DB db = mongo.getDB("test");

        DBCollection coll = db.getCollection("Restaurants");

        // create the pipeline operations, first with the $unwind
        DBObject unwind = new BasicDBObject("$unwind", "$reviews");

        // build the $group operations
        DBObject groupFields = new BasicDBObject("_id", "$name");
        groupFields.put("avg_rating", new BasicDBObject("$avg", "$reviews.rating"));

        DBObject group = new BasicDBObject("$group", groupFields);
        List<DBObject> pipeline = Arrays.asList(unwind, group);

        AggregationOutput output = coll.aggregate(pipeline);

        for (DBObject result : output.results()) {
            System.out.println(result);
        }
    }
}

关于java - MongoDB嵌入数组属性平均值(使用Java和MongoJack),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37035706/

相关文章:

Java - 打印随机字

node.js - 如果文档的 _id 已经存在,如何将数组元素推送到数组;如果 _id 不存在,如何创建新文档?

python - 尝试使用Docker访问MongoDB时,连接被拒绝[Errno 111]

java - 使用 MongoDB 和 MongoJack 的简单对象插入

java - MongoJack 支持 @javax.persistance.Id 不起作用

java - Jetty:从另一个 jar 加载上下文

java - Liferay 6.1 中的 XML Web 服务

java - 为什么我在增强 ebean scala 实体时收到 java.lang.VerifyError

javascript - 如何使用 multer-gridfs-storage、express、mongodb 在用户配置文件中添加图像路径

java - MongoJack 未找到对象