2014-11-03 90 views
0

我想使用聚合框架來總結一個嵌套數組的嵌套數組並返回原始文檔的排序順序。MongoDB得到一個文件數組內的嵌套數組的總數

所以這是我的文檔的樣子:

myColl: { 
_id: 123, 
fruits: [{ 
    name: apple, 
    buyers: [{buyer1}, {buyer2}] 
    }, 
    { 
    name: banana, 
    buyers: [{buyer1}, {buyer2}, {buyer3}] 
] 
} 

,你可以水果是MYCOLL文檔中的子文檔的陣列,以及購房者的水果裏面的子文檔諾特爾陣列。

我想要的是統計所有水果的文檔中的買家數組。所以上面的文件應該有'5'的總買家。

然後我想在總購買者中對myColl中的所有文檔進行排序。我已經嘗試了一些東西,我似乎無法得到它的權利:

db.myColl.aggregate([ 
{$unwind: '$fruits'}, 
{$unwind: '$fruits.buyers'}, 
     {$group: { 
      _id: '$fruits.buyers', 
      totalBuyers: {$sum: '1'}, 
         docs: {$push: '$$ROOT'} 
     }}, 
     {$sort: {'totalBuyers': 1}}]) 

的不給我想要的結果,並totalBuyers始終爲0。另外,它返回我的詞,然後MYCOLL的總數。我猜這是與'_id'字段有關。

我曾看過其他一些SO問題,但找不到匹配或適用於我的案例。

我最後的手段是自己計算一下,或者創建一個新的域來完成它,但如果我可以運行一個查詢,它會讓我的生活變得更容易。

回答

0

右鍵,很多修修補補和亂搞後,我有兩個問題:

1)我曾在我的號碼,愚蠢的錯誤報價。 2)我需要顯式組由$$ ROOT._id

所以這裏是工作的解決方案:

db.myColl.aggregrate(
[ 
     {$unwind: '$fruits'}, 
     {$unwind: '$fruits.buyers'}, 
     {$group: { 
      _id: '$$ROOT._id', 
         doc: {$first: '$$ROOT'}, 
      totalBuyers: {$sum: 1} 
     }}, 
     {$sort: {'totalBuyers': -1}}, 
       {$limit : 10 } 
    ] 
) 

注意,我不得不用「$第一」而不是「$推」所以它只檢索第一個文件,因爲文件重複,否則爲每個買家。