2016-06-12 15 views
0

比方說,我們有一個集合如下MongoDB的數項

{ "_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} 
}); 

,但它不放鬆的數組,我似乎無法以能夠加入該項目作爲集團的一部分算

任何想法?

感謝

回答

2

您需要$unwind通過「項目」和「大小」的「大小」數組,那麼$group和使用$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 } 
+0

這是太棒了,謝謝你。我對如何讓美元放鬆工作感到困惑。這很棒!! – Selrac