Menu
CoddyTech

Dokumente einfügen

Teil des Abschnitts Datenbanken mit MongoDB der Node.js-Journey von Coddy. Lektion 5 von 29.

Ein Client sendet ein neues Buch im POST-Body, und der Server muss es speichern und mitteilen, was er gespeichert hat.

Jedes Dokument hat ein Feld _id, seinen eindeutigen Schlüssel in der Sammlung. Wenn das Objekt, das du einfügst, keines hat, erstellt insertOne eines und schreibt es auch in dasselbe Objekt. Der Aufruf gibt nur acknowledged und insertedId zurück, niemals das Dokument. insertedId ist ein ObjectId, die Art von ID, die MongoDB erzeugt. Das Suchen anhand eines ObjectId erklärt es.

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); // dieselbe ID

Nach dem Einfügen ist das übergebene Objekt also das gespeicherte Dokument, einschließlich _id: Genau das möchte ein Client zurückerhalten.

Der Startcode fügt mit insertMany drei Bücher ein; diese Methode nimmt ein Array von Dokumenten entgegen. insertOne nimmt ein einzelnes Dokument entgegen. Beide führen asynchrone Schreibvorgänge aus.

challenge icon

Aufgabe

Einfach

Clients können jetzt Bücher hinzufügen. Speichere das Buch, das ein Client sendet, und sende es mit seiner neuen ID zurück.

  1. Füge in server.js unter GET /books eine POST /books-Route hinzu.
  2. Sie speichert den JSON-Body als neues Dokument in der books-Collection.
  3. Sie antwortet mit dem Status 201 und dem Buch, wie es gespeichert wurde, einschließlich der von MongoDB erstellten _id. Für den Body unter „Ausprobieren“ lautet die Antwort:
    { "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary", "_id": "6720a1f4c2b9e81d3a5f0c14" }
    Deine _id wird anders sein. Die Reihenfolge der Felder spielt keine Rolle. Ausprobieren: Sende POST /books mit diesem Body: { "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary" }. Du erhältst den Status 201 und das Buch mit einer _id. Sende GET /books: Du erhältst vier Bücher, wobei Beloved das letzte ist. Der Tab „Daten“ zeigt vier Dokumente in books. Drücke erneut auf „Ausführen“, und Beloved ist verschwunden. Jeder Ausführen-Vorgang beginnt mit einer leeren Datenbank, und der Starter speichert dieselben drei Bücher erneut.

Probier es selbst

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

// Jeder Fehler gibt { error: message } zurück.
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');
});

Alle Lektionen in Datenbanken mit MongoDB

Übe selbstständig: Express-Playground