2013-03-17 92 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