在MongoDB中获取内部数组最大大小的文档

jav*_*dee 5 mongodb mongodb-query aggregation-framework

样例Mongo文件:

{
    "_id": "128374",
    "x": [
        {
            "i": "83847575",
            "y": [
                {
                    "i": "9389489283",
                    "t": "2014-04-11T20:46:57+0000"
                },
                {
                    "i": "9389489284",
                    "t": "2014-04-11T20:47:57+0000"
                }
            ]
        },
        {
            "i": "83847576",
            "y": [
                {
                    "i": "2382349385",
                    "t": "2014-01-15T23:43:29+0000"
                },
                {
                    "i": "9389489286",
                    "t": "2014-04-11T20:47:57+0000"
                },
                {
                    "i": "9389489286",
                    "t": "2014-04-11T20:49:57+0000"
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

如何获取每个文档的内部数组“ y”的最大数量?我要解决的问题是获取最大数量为y的记录。谢谢!

以下是我的总计数“ y”。

db.coll.aggregate( 
{ "$unwind" : "$x" } , 
{ "$project" : { "x" : "$x" } } , 
{ "$unwind" : "$x.y" }, 
{ "$group" : { _id : null, number : { $sum : 1 } } } )
Run Code Online (Sandbox Code Playgroud)

Nei*_*unn 1

为了计算内部元素,您需要一些东西来锚定分组。在这种情况下,您可以使用i与以下级别相同的元素y

db.collection.aggregate([
    { "$unwind" : "$x" }, 
    { "$unwind" : "$x.y" }, 
    { "$group" : { 
        "_id" : {
          "_id": "$_id",  
          "xi":"$x.i"
        },
        "number" : { "$sum" : 1 } 
    }},
    { "$sort": { "number": -1 }},
    { "$limit": 1 } 
])
Run Code Online (Sandbox Code Playgroud)

因此,通过将分组键与文档复合,_id您可以通过将其排序到顶部来匹配具有最大内部值的文档y作为计数。