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 IDNach 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.
Aufgabe
EinfachClients können jetzt Bücher hinzufügen. Speichere das Buch, das ein Client sendet, und sende es mit seiner neuen ID zurück.
- Füge in
server.jsunterGET /bookseinePOST /books-Route hinzu. - Sie speichert den JSON-Body als neues Dokument in der
books-Collection. - 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:Deine{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary", "_id": "6720a1f4c2b9e81d3a5f0c14" }_idwird anders sein. Die Reihenfolge der Felder spielt keine Rolle. Ausprobieren: SendePOST /booksmit 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. SendeGET /books: Du erhältst vier Bücher, wobei Beloved das letzte ist. Der Tab „Daten“ zeigt vier Dokumente inbooks. 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
1Dokumente
Ein Buch als DokumentSammlungen und DatenbankenVerbindung zu MongoDB herstellenGespeicherte Dokumente lesenDokumente einfügenEin Dokument findenÜber ObjectId suchenZahlen vergleichenAbfragefilterZurückgegebene Felder auswählenAbfrageergebnisse sortierenDie ersten Ergebnisse behaltenProjektion, Sortierung und LimitÜbe selbstständig: Express-Playground