הבאת כל הרשימה
חיברנו את ה-API ל-DB. עכשיו נשתמש בשאילתת get כדי לקבל את רשימת הספרים. נשים לב שהפונקציה find מחזירה לנו cursor, שזה אובייקט שמצביע על קבוצת רשומות שמגיעה דרך השאילתא שלנו. בלי משתנים שנשלחים בתוך פונקציית find, ה-cursor יצביע על כל האוסף.
אם יהיה לנו פילטר, ה-cursor יצביע על קבוצת הרשומות שעונה לתנאי הפילטר.
ה-cursor מביא איתו פונקציות שאפשר להשתמש בהן על המידע שמגיע. למשל toArray שמעבירה את הרשומות למערך ו-forEach שלוקחת כל רשומה אחת אחרי השנייה ונותנת לנו אפשרות לעבד כל אחת בנפרד.
עוד משהו שכדאי לדעת זה ש-MongoDB לא מביא את כל הרשומות אוטומטית, מכיוון שזו יכולה להיות רשימה ארוכה מאוד שמעמיסה על הרשת. ברירת המחדל היא להביא חבילות של 101 רשומות בכל פעם.
קובץ app.js
// routes
app.get('/books', (req, res) => {
let books = []
db.collection('books')
.find()
.sort({ author: 1 })
.forEach(book => books.push(book))
.then(() => {
res.status(200).json(books)
})
.catch(() => {
res.status(500).json({ error: "No data fetching"})
})
})
הבאת רשומה אחת
הדבר הבא שנרצה זה להביא רשומה בודדת על סמך ה-ID של הרשומה. כדי לבקש את הרשומה על סמך ה-ID נשתמש ב-ObjectId ונצטרך להוסיף גם את const { ObjectId } = require('mongodb') על מנת לקבל אותו.
app.get('/books/:id', (req, res) => {
db.collection('books')
.findOne({_id: new ObjectId(req.params.id)})
.then(doc =>{
res.status(200).json(doc)
})
.catch(error => {
res.status(500).json({ error: "Could not fetch the document"})
})
})
אם נשלח ערך לא תקין לפונקצייה של ObjectId נקבל שגיאה, לכן לפני ששולים את הערך, כדאי לבדוק שהוא valid עבור הפונקציה.
app.get('/books/:id', (req, res) => {
if(ObjectId.isValid(req.params.id)){
db.collection('books')
.findOne({_id: new ObjectId(req.params.id)})
.then(doc =>{
res.status(200).json(doc)
})
.catch(err => {
res.status(500).json({ error: "Could not fetch the document"})
})
} else {
res.status(500).json({ error: "Not a valid id"})
}
})
אם לא התקבל ערך מהשאילתא, כלומר אין רשומה עם ID באוסף, נקבל null.