iT邦幫忙

2022 iThome 鐵人賽

DAY 2
1
自我挑戰組

被MongoDB用Aggregate暴打的後端小菜雞日記系列 第 2

被MongoDB用Aggregate暴打的後端小菜雞日記-day2-什麼是aggregate pipeline?

  • 分享至 

  • xImage
  •  

什麼是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" }

整體來說,就像工廠的生產線,一個一個步驟往下組裝汽車,最後生產汽車交給客戶
Photo by carlos aranda on Unsplash

本篇文章同步放在我的部落格,大家有空可以進來逛逛


上一篇
被MongoDB用Aggregate暴打的後端小菜雞日記-day1-序言
下一篇
被MongoDB用Aggregate暴打的後端小菜雞日記-day3-基本使用懶人包
系列文
被MongoDB用Aggregate暴打的後端小菜雞日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言