Inserimento di documenti
Fa parte della sezione Database con MongoDB del percorso Node.js di Coddy. Lezione 5 di 29.
Un client invia un nuovo libro nel corpo di una richiesta POST, e il server deve memorizzarlo e comunicare cosa ha memorizzato.
Ogni documento ha un campo _id, la sua chiave univoca nella raccolta. Se l'oggetto che inserisci non ne ha uno, insertOne ne crea uno e lo scrive anche nello stesso oggetto. La chiamata restituisce solo acknowledged e insertedId, mai il documento. insertedId è un ObjectId, il tipo di id che MongoDB genera. La ricerca tramite ObjectId lo spiega.
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); // lo stesso idQuindi, dopo l'inserimento, l'oggetto che hai passato è il documento memorizzato, _id incluso: è proprio quello che un client vuole ricevere.
Il codice iniziale inserisce tre libri con insertMany, che accetta un array di documenti. insertOne accetta un solo documento. Entrambe sono operazioni di scrittura asincrone.
Sfida
FacileOra i client possono aggiungere libri. Memorizza il libro inviato da un client e invialo di nuovo con il suo nuovo id.
- In
server.js, sottoGET /books, aggiungi una routePOST /books. - Memorizza il corpo JSON come nuovo documento nella raccolta
books. - Risponde con lo stato 201 e il libro così come è stato memorizzato, incluso l’
_idcreato da MongoDB. Per il corpo in Provalo, la risposta è:Il tuo{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary", "_id": "6720a1f4c2b9e81d3a5f0c14" }_idsarà diverso. L’ordine dei campi non è importante. Provalo: inviaPOST /bookscon questo corpo:{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary" }. Ottieni 201 e il libro con un_id. InviaGET /books: ottieni quattro libri, con Beloved per ultimo. La scheda Dati mostra quattro documenti inbooks. Premi Esegui di nuovo e Beloved scompare. Ogni esecuzione inizia con un database vuoto e il codice iniziale memorizza di nuovo gli stessi tre libri.
Provalo tu
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());
// Ogni errore restituisce { 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');
});
Tutte le lezioni di Database con MongoDB
1Documenti
Un libro come documentoRaccolte e databaseConnessione a MongoDBLettura dei documenti memorizzatiInserimento di documentiRicerca di un documentoRicerca tramite ObjectIdConfronto tra numeriFiltri di queryScelta dei campi restituitiOrdinamento dei risultati della queryMantenere i primi risultatiProiezione, ordinamento e limiteEsercitati da solo: Playground Express