在一個集合具有以下通式結構:訪問的外部參數和文檔中的mongodb組聚合
{_id: 'id1', clientId: 'cid1', clientName:'Jon', item: 'item1', dateOfPurchase: '...'},
{_id: 'id2', clientId: 'cid1', clientName:'Jon', item: 'item2', dateOfPurchase: '...'},
{_id: 'id3', clientId: 'cid2', clientName:'Doe', item: 'itemX', dateOfPurchase: '...'}
... etc
目標是通過clientId
創建一個分組來計算簡單的統計,例如每個clientId的總次數。實現這一點使用的Node.js MongoDB的驅動程序API Collection.group method
的一種方式是:
db.collection.group(
'clientId',
{},
{ count: 0 },
function(obj, prev) {
prev.count++;
},
true
}
的這對上述採樣數據的輸出將類似於:
{clientId: 'cid1', count: 2}
{clientId: 'cid2', count: 1}
問題1 :將某些外部值傳遞給reducer
函數的最佳方法是什麼?例如,我可能想要計算在特定日期之前/之後進行的購買的不同計數,並且希望將此日期作爲參數傳遞。我知道mapReduce
我可以使用scope
選項來達到這個目的。我想知道是否有辦法用group
函數來做到這一點。我可以使用迭代器對象,但感覺哈克。
問題2:有沒有辦法從finalize
函數中訪問原始文檔,以便在結果中包含一些額外的數據?從原來的文件,如clientName
即項目額外的字段:
{clientId: 'cid1', count: 2, clientName: 'Jon'}
{clientId: 'cid2', count: 1, clientName: 'Doe'}
澄清的問題2, 一)我可以添加額外的領域reducer
函數內,但感覺多餘的包括不應該運行代碼在每一次迭代。 二)我可以使用聚合管道來實現這樣的事情,但我想知道如果我能做到這一點與Collection.group
這裏