Insérer des documents
Fait partie de la section Bases de données avec MongoDB du Journey Node.js de Coddy. Leçon 5 sur 29.
Un client envoie un nouveau livre dans le corps d’une requête POST, et le serveur doit le stocker et indiquer ce qu’il a stocké.
Chaque document possède un champ _id, sa clé unique dans la collection. Lorsque l’objet que vous insérez n’en possède pas, insertOne en crée un et l’ajoute également à ce même objet. L’appel ne renvoie que acknowledged et insertedId, jamais le document. insertedId est un ObjectId, le type d’identifiant que MongoDB génère. La recherche par ObjectId permet de comprendre son fonctionnement.
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); // le même idAinsi, après l’insertion, l’objet que vous avez transmis est le document stocké, avec son _id : c’est ce que le client souhaite recevoir en retour.
Le code de démarrage insère trois livres avec insertMany, qui prend un tableau de documents. insertOne prend un seul document. Les deux sont des écritures asynchrones.
Défi
FacileLes clients peuvent maintenant ajouter des livres. Stocke le livre envoyé par un client et renvoie-le avec son nouvel identifiant.
- Dans
server.js, sousGET /books, ajoute une routePOST /books. - Elle stocke le corps JSON comme nouveau document dans la collection
books. - Elle répond avec le statut 201 et le livre tel qu’il a été stocké, y compris le
_idcréé par MongoDB. Pour le corps utilisé dans « Essayer », la réponse est :Ton{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary", "_id": "6720a1f4c2b9e81d3a5f0c14" }_idsera différent. L’ordre des champs n’a pas d’importance. Essaie : envoiePOST /booksavec ce corps :{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary" }. Tu obtiens le statut 201 et le livre avec un_id. EnvoieGET /books: tu obtiens quatre livres, avec Beloved en dernier. L’onglet Données affiche quatre documents dansbooks. Appuie de nouveau sur « Jouer » et Beloved disparaît. Chaque lancement commence avec une base de données vide, et le code de départ stocke à nouveau les trois mêmes livres.
Essayez vous-même
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());
// Chaque erreur renvoie { 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');
});
Toutes les leçons de Bases de données avec MongoDB
1Documents
Un livre comme documentCollections et bases de donnéesSe connecter à MongoDBLire des documents stockésInsérer des documentsTrouver un documentRechercher par ObjectIdComparer des nombresFiltres de requêteChoisir les champs renvoyésTrier les résultats de requêteConserver les premiers résultatsProjection, tri et limiteEntraînez-vous par vous-même : Playground Express