1

我想從user_id組合user_idorder其中有很多條目,但我想獲取訂單數量最多的5位用戶,並計算特定用戶的總價。

例如,如果我發出了10個訂單,我想獲取我的ID和我所有訂單的總和。 我用下面的代碼,但它不工作:

Order.find({$group : { user_id : "$user_id"}},function(error,fetchAllTopUsers){ 
    console.log('##################'); 
     console.log(fetchAllTopUsers); 
    }) 

我已經檢查了這個例子,但他們沒有使用與$group找到。我在Node.js和MongoDB中是新的。

Query and sum all with mongoose

樣本文件

{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 100 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 59 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 26 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 533 }, 
{ user_id : '57c7f4312b3c9771219bd21c', totalprice : 544 },  
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 250 }, 
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 157 }, 
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 149 }, 
{ user_id : '57efb93fdc78c816a3a15c4a', totalprice : 104 } 

我期待的輸出象下面這樣:

{ 
    user_id : '57c7f4312b3c9771219bd21c', 
    finalTotal : 1262 
}, 
{ 
    user_id : '57efb93fdc78c816a3a15c4a' 
    finalTotal : 660 
} 
+0

OK,讓我補充表數據。 –

回答

1

$group運營商僅可與聚合框架,因此你需要運行由組織文檔的聚合管道字段,然後按照彙總的finalTotal字段使用$sort對文檔進行排序,然後使用$limit獲得前5個文檔。

按照這條管道來獲得所需的結果:

Order.aggregate([ 
    { 
     "$group": { 
      "_id": "$user_id", 
      "finalTotal": { "$sum": "$totalprice" } 
     } 
    }, 
    { "$sort": { "finalTotal": -1 } }, 
    { "$limit": 5 } 
]).exec(function(error, fetchAllTopUsers){ 
    console.log('##################'); 
    console.log(fetchAllTopUsers); 
}); 
+0

謝謝你的回覆。我需要通過user_id總計總價。像pritesh使100訂單和總價格是15000,Chridam使3訂單和總價格是這樣的 –

+0

以上答案正在工作,但下面不工作。再次看到我的評論。我已經編輯例 –

+0

是的,先生,我同意,讓我編輯我的問題。 –

相關問題