什麼是Aggregate呢?
基本上你可以想像它是一種搜尋功能,跟find指令很像,但功能比它更多元。
例如:我們會用以下指令來找尋user的資料,尋找使用者名字叫Join,且年紀大於18的資料,並且我指定回傳的資料,只要回傳id, name, phone這三格欄位就好
user.find(
{
name: "Join",
age: { $gt: 18 }
},
{ id: 1, name: 1, phone: 1 }
);
如果是用aggregate,我們可以這樣寫
user.aggregate([
{
"$match": {
name: "Join",
age: { $gte: 18 }
}
},
{ "$project": { id: 1, name: 1, phone: 1 } }
]);
其中$match
代表你希望你搜尋到的資料,要符合什麼條件,$project
代表你希望回傳的欄位
aggregate帶入到第一個參數會是一個陣列,陣列每一個item,代表你要處理資料的指令,一次執行一行,處理完資料後,給下一個指令處理,最後回傳處理完的資料。
整體流程會像這樣
一開始的資料
{ id: 1, name: "cindy", age: 8, phone: "0967321357", sex: 1 },
{ id: 2, name: "Join", age: 28, phone: "0934950632", sex: 0 },
{ id: 3, name: "Join", age: 10, phone: "0979904523", sex: 0 }
經過第一輪$match
篩選符合的資料,只會有一筆資料符合條件回傳
{ id: 2, name: "Join", age: 28, phone: "0934950632", sex: 0 }
接下來資料就交給$project
來篩選你要的欄位,最後回傳的資料會是
{ id: 2, name: "Join", age: 28, phone: "0934950632" }
整體來說,就像工廠的生產線,一個一個步驟往下組裝汽車,最後生產汽車交給客戶
本篇文章同步放在我的部落格,大家有空可以進來逛逛