Wstawianie dokumentów
Część sekcji Bazy danych z MongoDB ścieżki Node.js w Coddy. Lekcja 5 z 29.
Klient wysyła nową książkę w treści żądania POST, a serwer musi ją zapisać i poinformować, co zapisał.
Każdy dokument ma pole _id, czyli swój unikalny klucz w kolekcji. Jeśli wstawiany obiekt go nie ma, insertOne tworzy je i zapisuje również w tym samym obiekcie. Wywołanie zwraca tylko acknowledged i insertedId, nigdy dokument. insertedId to ObjectId, czyli rodzaj identyfikatora generowanego przez MongoDB. Wyszukiwanie po ObjectId wyjaśnia tę kwestię.
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); // to samo idZatem po wstawieniu przekazany obiekt jest zapisanym dokumentem, łącznie z polem _id: właśnie to klient chce otrzymać z powrotem.
W kodzie początkowym za pomocą insertMany dodawane są trzy książki. Metoda ta przyjmuje tablicę dokumentów. insertOne przyjmuje jeden dokument. Obie metody wykonują asynchroniczne zapisy.
Wyzwanie
ŁatwyKlienci mogą teraz dodawać książki. Zapisz książkę przesłaną przez klienta i odeślij ją z nowym identyfikatorem.
- W pliku
server.js, poniżejGET /books, dodaj trasęPOST /books. - Zapisuje ona treść JSON jako nowy dokument w kolekcji
books. - Odpowiada statusem 201 i książką w postaci, w jakiej została zapisana, włącznie z utworzonym przez MongoDB polem
_id. Dla treści użytej w opcji „Wypróbuj” odpowiedź wygląda tak:Twoje{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary", "_id": "6720a1f4c2b9e81d3a5f0c14" }_idbędzie inne. Kolejność pól nie ma znaczenia. Wypróbuj: wyślijPOST /booksz następującą treścią:{ "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary" }. Otrzymasz status 201 i książkę z polem_id. WyślijGET /books: otrzymasz cztery książki, a Beloved będzie ostatnia. Karta Dane pokazuje cztery dokumenty w kolekcjibooks. Naciśnij ponownie „Uruchom”, a Beloved zniknie. Każde uruchomienie rozpoczyna się od pustej bazy danych, a kod początkowy ponownie zapisuje te same trzy książki.
Spróbuj swoich sił
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());
// Każdy błąd zwraca odpowiedź { 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');
});
Wszystkie lekcje w sekcji Bazy danych z MongoDB
1Dokumenty
Książka jako dokumentKolekcje i bazy danychŁączenie z MongoDBOdczytywanie zapisanych dokumentówWstawianie dokumentówWyszukiwanie jednego dokumentuWyszukiwanie według ObjectIdPorównywanie liczbFiltry zapytańWybieranie zwracanych pólSortowanie wyników zapytaniaOgraniczanie do pierwszych wynikówProjekcja, sortowanie i limit2Modyfikowanie dokumentów
Aktualizowanie dokumentówOperatory aktualizacjiPoćwicz samodzielnie: Edytor online Express