Inserción de documentos
Parte de la sección Bases de datos con MongoDB del Journey de Node.js de Coddy. Lección 5 de 29.
Un cliente envía un libro nuevo en el cuerpo de una solicitud POST, y el servidor tiene que guardarlo e indicar qué guardó.
Cada documento tiene un campo _id, su clave única en la colección. Cuando el objeto que insertas no tiene uno, insertOne crea uno y también lo escribe en ese mismo objeto. La llamada solo devuelve acknowledged y insertedId, nunca el documento. insertedId es un ObjectId, el tipo de id que genera MongoDB. Buscar por ObjectId lo explica.
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); // el mismo idAsí que, después de la inserción, el objeto que pasaste es el documento almacenado, con _id incluido: eso es lo que un cliente quiere recibir.
El código inicial inserta tres libros con insertMany, que recibe un arreglo de documentos. insertOne recibe un documento. Ambas son escrituras asíncronas.
Desafío
FácilAhora los clientes pueden añadir libros. Guarda el libro que envía un cliente y devuélveselo con su nuevo id.
- En
server.js, debajo deGET /books, añade una rutaPOST /books. - Guarda el cuerpo JSON como un documento nuevo en la colección
books. - Responde con el estado 201 y el libro tal como se guardó, incluido el
_idque creó MongoDB. Para el cuerpo de «Pruébalo», la respuesta es:Tu{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary", "_id": "6720a1f4c2b9e81d3a5f0c14" }_idserá diferente. El orden de los campos no importa. Pruébalo: envíaPOST /bookscon este cuerpo:{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary" }. Obtendrás 201 y el libro con un_id. EnvíaGET /books: obtendrás cuatro libros, con Beloved al final. La pestaña Datos muestra cuatro documentos enbooks. Pulsa «Ejecutar» otra vez y Beloved habrá desaparecido. Cada ejecución comienza con una base de datos vacía, y el código inicial vuelve a guardar los mismos tres libros.
Pruébalo tú mismo
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());
// Cada error responde con { 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');
});
Todas las lecciones de Bases de datos con MongoDB
1Documentos
Un libro como documentoColecciones y bases de datosConexión a MongoDBLectura de documentos almacenadosInserción de documentosBúsqueda de un documentoBúsqueda por ObjectIdComparación de númerosFiltros de consultaSelección de los campos devueltosOrdenación de los resultados de consultaConservar los primeros resultadosProyección, ordenación y límite2Modificación de documentos
Actualización de documentosOperadores de actualizaciónPractica por tu cuenta: Playground de Express