(5)被迫吃芒果的前端工程師 - MongoDB CRUD 之 Read 的 Cursor Methods

前言

意想不到吧? Read 竟然可以多寫一篇,雖然前一篇介紹了常見的 Read 的一些常用運算,但本質上來講我們還會再搭配一些常見的 Cursor Methods,那什麼是 Cursor 呢?讓我們接著認識一下吧。

Cursor Methods

那麼什麼是 Cursor Methods 呢?你可以把 Cursor Methods 理解成後處理的概念,什麼意思呢?例如我搜尋了年齡 25 歲然後狀態 true 的使用者時,正常會輸出 3 個。

但是因為使用了 Cursor Methods 之後去限制成了只輸出一筆,例如其中常見的方法 limit 限制查詢的數量

1
db.users.find({ $and: [{ age: { $eq: 25 } }, { status: false }] }).limit(1)

那麼在預設狀況下是會輸出三個,但是因為我們使用了 limit 之後只出現一筆

limit

因此 Cursor Methods 是針對搜尋結果再去做一些迭代處理,接下來也會列一些常見的 Cursor Methods。

limit

limit 剛剛已經有嘗試過了,但還是說明一次。

當我們輸入 db.users.find({ $and: [{ age: { $eq: 25 } }, { status: false }] }) ˇ ˋ時,預期是會輸出三筆資料,但若你想要限制成只輸出結果的一筆時就可以使用 limit

1
db.users.find({ $and: [{ age: { $eq: 25 } }, { status: false }] }).limit(1)

limit

sort

sort 非常顧名思義,當我們要做年齡排序時就非常好用,例如從小到大

1
db.users.find().sort({ age: 1 })

小到大

如果要大到小的話就會有一點特別,因為在 MongoDB 則是 -1

1
db.users.find().sort({ age: -1 })

大到小

這邊稍微替 sort 標注一下重點

  • 小到大是 1
  • 大到小是 -1

count

可能有些人看到 count 會誤以為這可以當作來統計的方法,但實際上來講 count 是拿來回傳 document 數量的,舉例來講我目前資料庫內總共有 14 筆,那透過該方法就會直接回傳 14

1
db.users.count()

count

那麼 count 是可以搭配 Query 一起來查詢數量的,例如我想找年齡 25 的人總共有幾個

1
db.users.find({ age: 25 }).count()

查詢數量

因此 count 比較像是陣列的 length 概念。

如果想計算類似年齡的方式的話,則必須使用一個叫做 aggregate 的方式

1
2
3
4
5
6
7
8
db.users.aggregate([
{
$group: {
_id: null,
ageTotal: { $sum: "$age" }
}
}
])

ageTotal

skip

skip 簡單來講就是略過的概念,意指你要跳過幾個,例如我要跳到第10個才開始輸出

1
db.users.find().skip(10)

skip

鏈式寫法

Cursor Methods 都可以支援鏈式寫法,什麼是鏈式寫法呢?就跟寫 jQuery 類似。

MongoDB 會從左至右執行結果,舉例來講先跳過五筆,然後限制兩筆資料,最後依據年齡排序大到小

1
db.users.find().skip(5).limit(2).sort({ age: -1 })

鏈式寫法

Liker 讚賞

這篇文章如果對你有幫助,你可以花 30 秒登入 LikeCoin 並點擊下方拍手按鈕(最多五下)免費支持與牡蠣鼓勵我。
或者你也可以考慮請我喝一杯咖啡

Google AD

撰寫一篇文章其實真的很花時間,如果你願意「關閉 Adblock (廣告阻擋器)」來支持我的話,我會非常感謝你 ヽ(・∀・)ノ