Menu
CoddyTech

Belge Ekleme

Coddy'nin Node.js Journey'sinin MongoDB ile Veritabanları bölümünün bir parçası. Ders 5 / 29.

Bir istemci, POST gövdesinde yeni bir kitap gönderir; sunucu da bunu depolayıp ne depoladığını bildirmelidir.

Her belgenin, koleksiyondaki benzersiz anahtarı olan bir _id alanı vardır. Eklediğiniz nesnede bu alan yoksa insertOne bir tane oluşturur ve aynı nesneye de yazar. Çağrı yalnızca acknowledged ve insertedId döndürür, belgeyi döndürmez. insertedId, MongoDB'nin oluşturduğu türden bir kimlik olan ObjectId'dir. ObjectId ile bulma bunu açıklar.

const movie = { title: 'Alien', year: 1979 };
const result = await movies.insertOne(movie);

console.log(result);    // { acknowledged: true, insertedId: new ObjectId('66f1...') }
console.log(movie._id); // aynı id

Yani ekleme işleminden sonra, gönderdiğiniz nesne _id de dahil olmak üzere depolanan belgedir: istemcinin geri istediği şey budur.

Başlangıç kodu, bir belge dizisi alan insertMany ile üç kitap ekler. insertOne tek bir belge alır. Her ikisi de eşzamansız yazma işlemidir.

challenge icon

Görev

Kolay

İstemciler artık kitap ekleyebilir. İstemcinin gönderdiği kitabı kaydedin ve yeni id'siyle birlikte geri gönderin.

  1. server.js dosyasında, GET /books rotasının altına bir POST /books rotası ekleyin.
  2. JSON gövdesini books koleksiyonunda yeni bir belge olarak kaydeder.
  3. 201 durum koduyla ve kaydedildiği hâliyle, MongoDB'nin oluşturduğu _id dâhil kitabı yanıt olarak gönderir. Dene bölümündeki gövde için yanıt şöyledir:
    { "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary", "_id": "6720a1f4c2b9e81d3a5f0c14" }
    Sizin _id değeriniz farklı olacaktır. Alanların sırası önemli değildir. Deneyin: Bu gövdeyle POST /books gönderin: { "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary" }. 201 yanıtı ve _id içeren kitabı alırsınız. GET /books gönderin: son sırada Beloved olmak üzere dört kitap alırsınız. Data sekmesinde books içinde dört belge görünür. Tekrar Çalıştır'a basın; Beloved silinir. Her Çalıştırma boş bir veritabanıyla başlar ve başlangıç kodu aynı üç kitabı yeniden kaydeder.

Kendin dene

import express from 'express';
import { MongoClient } from 'mongodb';

const client = new MongoClient('mongodb://localhost:27017');
const db = client.db('shelf');
const books = db.collection('books');

await books.insertMany([
    { title: 'Dune', author: 'Frank Herbert', year: 1965, isbn: '9780441013593', genre: 'scifi' },
    { title: 'Kindred', author: 'Octavia E. Butler', year: 1979, isbn: '9780807083697', genre: 'scifi' },
    { title: 'Emma', author: 'Jane Austen', year: 1815, isbn: '9780141439587', genre: 'classic' },
]);

const app = express();
app.use(express.json());

// Her hata { error: message } biçiminde yanıt verir.
function sendError(res, status, message) {
    res.status(status).json({ error: message });
}

app.get('/', (req, res) => {
    res.send('Bookshelf API');
});

app.get('/books', async (req, res) => {
    const list = await books.find().toArray();
    res.json(list);
});

app.listen(3000, () => {
    console.log('Bookshelf is running on port 3000');
});

MongoDB ile Veritabanları bölümündeki tüm dersler

Kendi başına pratik yap: Express playground