在 mongodb 中投影集合类型数组的大小

Project the size of a set type array in mongodb

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

[  
{  
    "$unwind":"$a"
},
{  
    $group:{  
        _id:"$a.acid",
        "sessions":{  
            $sum:1
        },
        "users":{  
            $addToSet:"$cid"
        }
    }
},
{  
    $project:{  
        "sessions":1,
        "users":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"
    }
    }
}])