【问题标题】:How to group nasted array in mongo db如何在mongodb中对嵌套数组进行分组
【发布时间】:2019-06-23 12:55:35
【问题描述】:

在我的 mongodb 集合中,我有下一条记录

{ "_id" : ObjectId("5d0dfb68264b2d01a3237a3e"), "name" : "lexa", "cat" : 2, "gender" : "male", "date" : ISODate("2019-06-22T09:56:56.070Z") }
{ "_id" : ObjectId("5d0dfb6c264b2d01a3237a3f"), "name" : "dima", "cat" : 2, "gender" : "male", "date" : ISODate("2019-06-22T09:57:00.925Z") }
{ "_id" : ObjectId("5d0dfb75264b2d01a3237a40"), "name" : "lena", "cat" : 2, "gender" : "female", "date" : ISODate("2019-06-22T09:57:10.003Z") }
{ "_id" : ObjectId("5d0dfb7a264b2d01a3237a41"), "name" : "nina", "cat" : 2, "gender" : "female", "date" : ISODate("2019-06-22T09:57:14.941Z") }
{ "_id" : ObjectId("5d0dfb8f264b2d01a3237a42"), "name" : "nina", "cat" : 1, "gender" : "female", "date" : ISODate("2019-06-22T09:57:35.128Z") }
{ "_id" : ObjectId("5d0dfb93264b2d01a3237a43"), "name" : "lena", "cat" : 1, "gender" : "female", "date" : ISODate("2019-06-22T09:57:39.789Z") }
{ "_id" : ObjectId("5d0dfb9b264b2d01a3237a44"), "name" : "dima", "cat" : 1, "gender" : "male", "date" : ISODate("2019-06-22T09:57:47.150Z") 

然后我使用聚合 mongo 框架按 cat 对记录进行分组。

db.foo.aggregate([{'$group': 
    {
        '_id': '$cat', 
        'users': 
            {'$push': 
                {
                    'name':'$name', 
                    'gender': '$gender'
                }
            }
    }
}])

该查询返回下一个结果

{
    "_id" : 1,
    "users" : [
        {
            "name" : "nina",
            "gender" : "female"
        },
        {
            "name" : "lena",
            "gender" : "female"
        },
        {
            "name" : "dima",
            "gender" : "male"
        }
    ]
}
{
    "_id" : 2,
    "users" : [
        {
            "name" : "lexa",
            "gender" : "male"
        },
        {
            "name" : "dima",
            "gender" : "male"
        },
        {
            "name" : "lena",
            "gender" : "female"
        },
        {
            "name" : "nina",
            "gender" : "female"
        }
    ]
}

问题是我需要添加到我的查询中以按我的用户数组分组。我想要这样的东西

{
    "_id" : 1,
    "users" : [
        {
            "gender": "male",
            "names": ["dima"]
        },
        {
            "gender": "female",
            "names": ["lena", "nina"]
        }
    ]
}
{
    "_id" : 2,
    "users" : [
        {
            "gender": "male",
            "names": ["lexa", "dima"]
        },
        {
            "gender": "female",
            "names": ["lena", "nina"]
        }
    ]
}

我还需要对嵌套数组进行分组,而不会丢失第一组结果

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    首先按猫 X 性别分组,然后像这样重组数据会更容易:

    db.foo.aggregate([
    {'$group': 
        {
            '_id': {cat: '$cat', gender: "$gender"}, 
            'names': 
                {'$push': 
                    {
                        'name':'$name', 
                    }
                }
        }
    },
    {
     $group: {
         '_id': "$_id.cat",
         users: { $push: { gender: "$_id.gender", names: "$names" }
     }
    }
    ])
    

    【讨论】:

    • 谢谢。这是我真正想要的)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2021-10-19
    • 2020-01-18
    • 2018-02-25
    相关资源
    最近更新 更多