有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我是MongoDB的新手。我必须找到Mongo DB中数组元素的平均值 e、 g

{
"_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”的平均值,其中query:iPad

此处的输出应为:

inq=263

我在谷歌上搜索得到了aggregate method,但无法用java代码转换

提前谢谢

问候


共 (2) 个答案

  1. # 2 楼答案

    让我们试着分解那个问题。首先,我想说:

    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"}}});