2013-03-17 97 views
1

我的歌曲的集合及其结构如下元数据:计数(场)对蒙戈

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

现在,我想每一位艺术家的列表,歌曲数量和件数它使用Node.js.到目前为止,使用聚合框架,我已经能够使用以下管线获得具有每个艺术家,其歌曲数量和具有专辑标题(而不仅仅是计数)的阵列的对象的数组:

在每一个艺术家0,因为它需要数字和不是字符串来总结:
collection.aggregate([ 
      { $project:{ 
       artist:1, 
       album:1 
      }}, 
      { $group: { 
       _id: "$artist", 
       songs:{$sum: 1}, 
       albums:{$addToSet:"$album"} 
      }}, 
      { $sort: { artist: 1 } } 
     ] 

如果我更换$addToSet$sum,我拿到专辑。

我只是无法绕过它!

回答

0

您需要向流水线添加几个步骤 - 相册阵列需要展开并计数。下面是它的样子:

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 } } 
     ] 
) 
+0

工程就像一个魅力,谢谢! – manutenfruits 2013-03-18 11:21:13