我們在之前都會使用
find()
來檢視或查詢資料,但有時候我們會想要針對回傳的結果進行一些處理,例如:排序、數量限制、翻頁效果等,就會使用到今天要介紹的這三個方法:sort()、limit() 及 skip()。
我們可以使用 sort()
對查詢結果進行排序:
db.movie.find().sort({imdb_score: 1})
db.movie.find().sort({imdb_score: 1, duration: 1})
db.movie.find().sort({imdb_score: -1})
我們使用 find()
查詢時回傳結果預設只會回傳前 20 筆資料,需輸入 "it" 進行翻頁才能看到接續的結果:
我們也可以使用 limit()
來設定回傳的資料數量,例如我們想要回傳評分最低的 10 部電影:db.movie.find().sort({imdb_score: 1}).limit(10)
上面提到使用 find()
查詢時回傳結果預設只會回傳前 20 筆資料,需輸入 "it" 進行翻頁才能看到接續的結果,我們也可以使用 skip()
來直接選擇回傳的頁數。
例如:我們想要查看評分最低的前 3 部電影,可以使用以下指令:db.movie.find().sort({imdb_score: 1}).limit(3)
但如果想要查看評分第 4 低到第 6 低的電影,則可以使用 limit(3).skip(3)
來省略前 3 筆資料:db.movie.find().sort({imdb_score: 1}).limit(3).skip(3)
同理,如果想要查看評分第 7 低到第 9 低的電影,則可以使用 limit(3).skip(6)
來省略前 6 筆資料:db.movie.find().sort({imdb_score: 1}).limit(3).skip(6)
我們使用 find()
查詢資料時回傳的結果是按照原先資料的新增順序:db.movie.find().limit(3)
我們如果想要對 find()
的結果進行排序,可能會想到使用以下的指令:db.movie.find().limit(3).sort({imdb_score:1})
limit(3)
的資料不同,那是因為我們使用 find().limit().sort()
的方法會針對 find()
的所有結果進行排序,而不是針對 limit()
後的結果排序。如果想要對 limit()
後的結果進行排序,則需要使用 聚合 Aggregation 的方法來完成:db.movie.aggregate([{$limit: 3} , {$sort: {imdb_score: 1}}])
今天介紹了幾種對 find()
的回傳結果進行操作的方法,下一篇將會介紹關於 update 更新操作的進階方法。