【问题标题】:Count(field) on MongoMongo上的计数(字段)
【发布时间】:2013-03-18 01:49:25
【问题描述】:

我有一组歌曲及其元数据,其结构如下:

[{
    title:"title",
    artist:"artist",
    album:"album,
    ...
},...

现在我想使用 Node.js 获取每个艺术家的列表,其中包含歌曲数量和专辑数量。到目前为止,使用聚合框架,我已经能够获取每个艺术家的对象数组、歌曲数量和专辑标题数组(而不仅仅是计数),使用以下管道:

collection.aggregate([
            { $project:{
                artist:1,
                album:1
            }},
            { $group: {
                _id: "$artist",
                songs:{$sum: 1},
                albums:{$addToSet:"$album"}
            }},
            { $sort: { artist: 1 } }
        ]

如果我将$addToSet 替换为$sum,我会在每个艺术家中得到albums:0,因为它期望数字而不是字符串相加。

我就是无法绕过它!

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    您需要向管道添加几个步骤 - 专辑数组需要展开然后计数。这是它的样子:

    collection.aggregate([
                { $project:{
                    artist:1,
                    album:1
                }},
                { $group: {
                    _id: "$artist",
                    songs:{$sum: 1},
                    albums:{$addToSet:"$album"}
                }},
                { $unwind: "$albums"},
                { $group: {
                    _id: "$_id",
                    songs:{$first: 1},
                    albums:{$sum: 1}
                }},
                { $sort: { artist: 1 } }
            ]
    )
    

    【讨论】:

      猜你喜欢
      • 2016-06-13
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 2018-06-16
      • 1970-01-01
      • 2023-03-16
      相关资源
      最近更新 更多