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ı idYani 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.
Görev
Kolayİstemciler artık kitap ekleyebilir. İstemcinin gönderdiği kitabı kaydedin ve yeni id'siyle birlikte geri gönderin.
server.jsdosyasında,GET /booksrotasının altına birPOST /booksrotası ekleyin.- JSON gövdesini
bookskoleksiyonunda yeni bir belge olarak kaydeder. - 201 durum koduyla ve kaydedildiği hâliyle, MongoDB'nin oluşturduğu
_iddâhil kitabı yanıt olarak gönderir. Dene bölümündeki gövde için yanıt şöyledir:Sizin{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary", "_id": "6720a1f4c2b9e81d3a5f0c14" }_iddeğeriniz farklı olacaktır. Alanların sırası önemli değildir. Deneyin: Bu gövdeylePOST /booksgönderin:{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary" }. 201 yanıtı ve_idiçeren kitabı alırsınız.GET /booksgönderin: son sırada Beloved olmak üzere dört kitap alırsınız. Data sekmesindebooksiç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