2016-05-14 75 views
2

我用的MongoDB和貓鼬相當新的和偶然的單個文件超過以下問題: 我有一個收集約600份文件這個(縮短)格式:創建一個從MongoDB中和貓鼬多個文檔

{ 
    _id: ObjectId(<Integer>), 
    sA: [ 
     { 
      age: { 
       value: <Integer> 
      } 
     } 
    ] 
} 

文檔包含的年齡值範圍是從0到大約100,但不是所有的值都被表示出來。 我要輸出一個

{ 
    labels: [<Integer>, <Integer>, ...], 
    data: [<Integer>, <Integer>, ...] 
} 

形式單一對象,其中標籤是包含的所有文件的所有年齡值的數組。並且數據包含發現的年齡值的次數。

我的問題是:

  1. 因爲我是在數據庫非常新,這是甚至可能的MongoDB的?
  2. 如果是這樣,是否也可以填充標籤和數據數組中的空白?比方說,輸出是這樣的:

    { 
        labels: [0,1,2,6,9] 
        data: [1,17,4,5,3] 
    } 
    

,但我想它看起來就像這樣:

{ 
    labels: [0,1,2,3,4,5,6,7,8,9], 
    data: [1,17,4,0,0,0,5,0,0,3] 
} 

到現在爲止我還沒有能夠存檔格式既不用聚合 - 也不與mapReduce管道。我需要分兩步做嗎?就像輸出一個有序數組,然後在服務器上使用Javascript函數來提取並填充數據和標籤數組,並在將對象發送回客戶端之前填充空白處?

預先感謝您!

回答

2

我相信這是你在找什麼:

db.collection.aggregate([ 
    { $unwind: "$sA" }, 
    { $group: { 
     _id: "$sA.age.value", 
     count: {$sum: 1} 
    } }, 
    { $sort: { 
     _id: 1 
    }}, 
    { $group: { 
     _id: null, 
     labels: { 
      $push: "$_id" 
     }, 
     data: { 
      $push: "$count" 
     } 
    }} 
]); 

我不相信遺漏值填充是可能的,但。

+0

是的,這沒關係。非常感謝你!! –