2013-04-24 68 views
0

分組我有下面的模式集合:貓鼬的NodeJS - 使用數組

{OrderId : id, CustomerId : id, amount: Number, otherPayers : [{name : String, amount : Number}]} 

我想提出的所有訂單的客戶ID的「量」的平均值,而我能做到這一點通過在平均數量上對customerId進行分組而合計。

現在,我希望輸出「金額」字段不僅是「金額」的平均值,還是「otherPayers」字段的「金額」字段的平均值。

我已經看了一下mapreduce,但我不能得到它的工作。

有什麼想法?在SQL中,使用子查詢會很簡單。

+0

你能給例如輸出文件 - 我不知道我很能告訴你想計算什麼,但我敢肯定它是可行的與MapReduce和我猜測它也可以用聚合框架完成。 – 2013-04-25 07:23:04

回答

0

我猜你想把otherPayers數組裏面的所有數值加上文檔頂層的數量字段。這裏是你如何與聚合框架做到這一點:

unwind = { $unwind : "$otherPayers" }; 
group = { $ group : { _id : "$CustomerId", 
         amt : { $first : "$amount" }, 
         count : { $sum : 1 }, 
         total : { $sum : "$otherPayers.amount" } 
     } }; 
project = { $project : { _id : 0, 
         CustomerId : "$_id", 
         avgPaid : { $divide : [ 
             { $add : [ "$total", "$amt" ] }, 
             { $add : [ "$count", 1 ] } 
         ] } 
} }; 

db.collection.aggregate(unwind, group, project);