Menu
CoddyTech

Menyisipkan Dokumen

Termasuk bagian Database dengan MongoDB dalam perjalanan Node.js di Coddy. Pelajaran 5 dari 29.

Client mengirim buku baru dalam body POST, dan server harus menyimpannya lalu memberi tahu apa yang disimpan.

Setiap dokumen memiliki field _id, yaitu kunci uniknya dalam collection. Jika objek yang kamu masukkan belum memilikinya, insertOne akan membuatnya dan menuliskannya juga ke objek yang sama. Pemanggilan ini hanya mengembalikan acknowledged dan insertedId, bukan dokumennya. insertedId adalah ObjectId, jenis id yang dibuat MongoDB. Menemukan dokumen berdasarkan ObjectId menjelaskan hal ini.

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); // id yang sama

Jadi, setelah penyisipan, objek yang kamu berikan adalah dokumen yang disimpan, termasuk _id: itulah yang ingin diterima kembali oleh client.

Starter memasukkan tiga buku dengan insertMany, yang menerima array dokumen. insertOne menerima satu dokumen. Keduanya adalah penulisan asinkron.

challenge icon

Tantangan

Mudah

Klien kini dapat menambahkan buku. Simpan buku yang dikirim klien, lalu kirim kembali dengan id barunya.

  1. Di server.js, di bawah GET /books, tambahkan rute POST /books.
  2. Rute ini menyimpan body JSON sebagai dokumen baru di collection books.
  3. Rute ini merespons dengan status 201 dan buku seperti saat disimpan, termasuk _id yang dibuat MongoDB. Untuk body di Coba, responsnya adalah:
    { "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary", "_id": "6720a1f4c2b9e81d3a5f0c14" }
    _id-mu akan berbeda. Urutan field tidak penting. Coba: Kirim POST /books dengan body ini: { "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary" }. Kamu mendapat 201 dan buku dengan _id. Kirim GET /books: kamu mendapat empat buku, dengan Beloved di urutan terakhir. Tab Data menampilkan empat dokumen di books. Tekan Jalankan lagi dan Beloved akan hilang. Setiap kali kamu menekan Jalankan, database dimulai dalam keadaan kosong, lalu program awal menyimpan tiga buku yang sama lagi.

Coba sendiri

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());

// Setiap error mengembalikan { error: message }.
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');
});

Semua pelajaran di Database dengan MongoDB

Latihan sendiri: Playground Express