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

Posted

技术标签:

【中文标题】在 mongodb 中投影集合类型数组的大小【英文标题】:Project the size of a set type array in 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
    

]

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

【问题讨论】:

【参考方案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。

以上是关于在 mongodb 中投影集合类型数组的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组内的文档中投影特定字段?

如何从对象数组中投影所有嵌套文档?

从与数组上的查询条件匹配的第一个元素中投影特定字段

Mongodb聚合计数数组/集合大小

SQL 查询:是不是可以在单个查询中投影四个结果?

在 Winforms 控件中投影?