java - 使用java在MongoDB中查找数组元素的平均值

标签 java mongodb aggregation-framework

我是 MongoDB 的新手。我必须在 Mongo DB 中找到数组元素的平均值 例如

{
"_id" : ObjectId("51236fbc3004f02f87c62e8e"),
"query" : "iPad",
"rating" : [
    {
        "end" : "130",
        "inq" : "403",
        "executionTime" : "2013-02-19T12:27:40Z"
    },
    {
        "end" : "152",
        "inq" : "123",
        "executionTime" : "2013-02-19T12:35:28Z"
    }
]
}

我想要“inq”的平均值,其中查询:iPad

这里的输出应该是:

inq=263

我在 google 中搜索并获得了聚合方法,但无法将其转换为 java 代码。

提前致谢

问候

最佳答案

让我们试着分解这个问题。我将从:

db.c.aggregate({$match: {query: "iPad"}}, {$unwind:"$rating"}, {$project: {_id:0,
q:"$query",i:"$rating.inq"}})

投影不是必需的,但使其余部分更具可读性:

{
    "result" : [
            {
                    "q" : "iPad",
                    "i" : "403"
            },
            {
                    "q" : "iPad",
                    "i" : "123"
            }
    ],
    "ok" : 1
}

那么我该如何分组呢?当然,通过“$q”:

db.c.aggregate({$match: {query: "iPad"}}, {$unwind:"$rating"}, {$project: {_id:0, 
q:"$query",i:"$rating.inq"}}, {$group:{_id: "$q"}}) :

{ "result" : [ { "_id" : "iPad" } ], "ok" : 1 }

现在让我们添加一些聚合运算符:

db.c.aggregate({$match: {query: "iPad"}}, {$unwind:"$rating"}, {$project: {_id:0, q:"$query",i:"$rating.inq"}}, {$group:{_id: "$q", max: {$max: "$i"}, min: {$min: "$i"}}}) :

{
    "result" : [
            {
                    "_id" : "iPad",
                    "max" : "403",
                    "min" : "123"
            }
    ],
    "ok" : 1
}

现在是平均值:

db.c.aggregate({$match: {query: "iPad"}}, {$unwind:"$rating"}, {$project:  
{_id:0,q:"$query",i:"$rating.inq"}}, {$group:{_id: "$q", av: {$avg:"$i"}}});

关于java - 使用java在MongoDB中查找数组元素的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14973615/

相关文章:

perl - 来自 MongoDB ISODate 对象的纳秒丢失

java - 升级我的 jhipster 应用程序

arrays - 如何将 MongoDB 文档字段移动到对象数组?

java - java中如何防止SQL二阶注入(inject)(Spring应用)

java - 如何从 Mongo Java 驱动程序调用 db.Collection.stats()

mongodb - 如何在 mongoDB 中对 $lookup 结果应用条件?

mongodb - 计算 MongoDB 中的唯一值

java - serialversionuid 是如何计算的

java - MVP 安卓 : how to pass data from one activity to another?

java - 输入验证 Java