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

时间:2015-07-30 12:45:31

标签: mongodb mongoose mongodb-query pymongo

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

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

通过上面的查询我可以显示所有用户,但我只想显示用户集(数组)的大小。任何人都可以帮我这个

1 个答案:

答案 0 :(得分: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"
    }
    }
}])