【问题标题】:Project the size of a set type array in mongodb在 mongodb 中投影集合类型数组的大小
【发布时间】:2015-10-21 20:01:00
【问题描述】:

我无法在投影和 groupby 中显示数组的大小。请找到我的以下查询。

[  
{  
    "$unwind":"$a"
},
{  
    $group:{  
        _id:"$a.acid",
        "sessions":{  
            $sum:1
        },
        "users":{  
            $addToSet:"$cid"
        }
    }
},
{  
    $project:{  
        "sessions":1,
        "users":1
    }
}

]

通过上述查询,我​​可以显示所有用户,但我只想显示用户集(数组)的大小。谁能帮我解决这个问题

【问题讨论】:

    标签: mongodb mongoose mongodb-query pymongo


    【解决方案1】:

    您可以在 mongo 中使用$size,如下查询:

    db.collection.aggregate[{
        "$unwind": "$a"
        }, {
        $group: {
            _id: "$a.acid",
            "sessions": {
                $sum: 1
            },
            "users": {
                $addToSet: "$cid"
            }
        }
        }, {
        $project: {
            "sessions": 1,
            "users": 1,
            "size": {
                $size: "$users"
            }
        }
        }
    ])
    

    在 OP 的评论之后编辑它给出了无效的操作员错误-

    您可以再次展开users 数组和count 用户数。但这涉及再次展开数组,因此不推荐,查询将类似于以下(未测试)

    db.collection.aggregate([{
        "$unwind": "$a"
    }, {
        $group: {
        _id: "$a.acid",
        "sessions": {
            $sum: 1
        },
        "users": {
            $addToSet: "$cid"
        }
        }
    }, {
        $unwind: "$users"
    }, {
        $group: {
        _id: "$_id",
        "count": {
            $sum: 1
        },
        "sessions": {$push:"$sessions"},// u can use "sessions":{$first:"$sessions"} also.
        "users": {
            $push: "$users"
        }
        }
    }])
    

    【讨论】:

    • @user1920 如果您对答案有任何疑问,您应该使用 cmets 而不是编辑答案。检查我的编辑。
    • 感谢您的回答@Vishwas
    • 当然@Vishwas 但其他人建议我不要添加 copmments。从下次开始,我将添加 cmets。非常感谢
    • @user1920 您应该修改您的问题或在答案中添加 cmets。
    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2013-01-12
    • 2021-09-19
    • 2019-01-13
    相关资源
    最近更新 更多