【问题标题】:MongoDB count items in arrayMongoDB计算数组中的项目
【发布时间】:2016-06-12 17:36:15
【问题描述】:

假设我们有一个如下的集合

{ "_id" : 1, "item" : "ABC", "sizes": [ "S", "M", "L"] },
{ "_id" : 2, "item" : "EFG", "sizes": [ "S" ] },
{ "_id" : 3, "item" : "ABC", "sizes": [ "M" ] }

我们如何列出数组中的项目(尺寸)以及与尺寸相关的项目数量

例如

size 'S', item 'ABC' = 1
size 'S', item 'EFG' = 1
size 'M', item 'ABC' = 2
size 'L', item 'ABC' = 1

请注意,大小“M”必须适用于项目为“ABC”的实例。

我尝试了以下

db.collection.group(
{
    key: {'sizes': true}, 
    initial: {sum: 0}, 
    reduce: function(doc, prev) { prev.sum += 1}
});

但它不会展开数组,我似乎无法将项目添加为组计数的一部分

有什么想法吗?

谢谢

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    您需要 $unwind "sizes" 数组,然后 $group 通过 "item" 和 "sizes" 并使用 $sum 返回计数。

    db.collection.aggregate(
        [ 
            { "$unwind": "$sizes" }, 
            { "$group": { 
                "_id": { 
                    "item": "$item", 
                    "sizes": "$sizes" 
                }, 
                "count": { "$sum": 1 } 
            }}
        ]
    ) 
    

    产生:

    { "_id" : { "item" : "EFG", "sizes" : "S" }, "count" : 1 }
    { "_id" : { "item" : "ABC", "sizes" : "L" }, "count" : 1 }
    { "_id" : { "item" : "ABC", "sizes" : "M" }, "count" : 2 }
    { "_id" : { "item" : "ABC", "sizes" : "S" }, "count" : 1 }
    

    【讨论】:

    • 这太棒了,谢谢。我对如何让 $unwind 工作感到有点困惑。这太棒了!
    猜你喜欢
    • 2014-02-18
    • 2017-11-19
    • 2018-12-13
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多