MongoDB
Najpopularniejsza nierelacyjna baza danych, powstała w 2009, związana z JS. Różnice pomiędzy bazami SQL i noSQL: Twórca Stron "SQL vs noSQL | MySQL vs MongoDB - różnice" [17:18] | Academind "SQL vs NoSQL or MySQL vs MongoDB" [YT 21:29]
Instalacja MongoDB serwer - MongoDB Community Server, pyta czy zainstalować wersję Complete, czy Custom: w Complete jest MongoDB Compass. Trzeba też wybrać lokalizację danych i logów.
Baza danych. W pliku App.js najpierw require mongoose, potem mongoose.connect. Weryfikacja połączenia opisana w dokumentacji.
Nomenklatura:
- Cluster (w MongoDB Atlas): usługa zdefiniowana w konfiguratorze, w klastrze jest wiele baz danych.
- Database: pojedyncza baza danych
- Collection: odpowiednik tabeli SQL, zespół danych zdefiniowany w tzw. modelu
- Document: pojedynczy zapis, rekord bazy
Shell mongo, polecenie mongo.
MongoDB przechowuje dane wg tzw modeli: schematów danych, opisujących pola, rodzaj danych i czy są wymagane. Modele są trzymane w osobnym katalogu /models, na końcu każdego modelu eksport. Zwyczajowo modele nazywane są z dużej litery.
MongoDB Shell
db.cars.insertOne({brand: 'Ford', model : 'Taunus'});
Można umieścić wiele w tablicy.
db.cars.insertMany([{...}, {...}])
db.cars.find()
Wyszukać, można wg każdego pola danych. Ale ID nie jest stringiem a specyficznym rodzajem obiektu i samo skopiowanie go nie wystarczy, trzeba objąć go funkcją ObjectId("tu numer"). Bez parametrów wylistuje całą kolekcję.
Wyszukanie wg parametrów: większe niż {$gt: parametr}; mniejsze niż {$lt: parametr}, można je łączyć: {$gt:30, $lt:50}. Odpowiednio $lte
i $gte
oznaczają mniejsze/większe lub równe (equal). {$in [5, 10, 15]} - wyszuka wszystkie z tymi parametrami, przeciwieństwo {$nin [5, 10, 15]} (not in).
OR
db.clients.find({$or: [{age: {$gt: 20, $lt: 50}}, {active:true}]})
Zaprzeczenie
db.clients.find({age: {$not: {$gt: 20}}})
Modyfikacja, aktualizacja. Polecenie update ma trzy parametry: które dokumenty uaktualnić (jeżeli brak odnosi się do wszystkich), co w nich zmienić, trzeci określa czy wszystkie znalezione, bez tego domyślnie tylko pierwszy.
db.clients.update({}, {#set: {active: true}}, {multi: true})
updateOne tylko jeden dokument, updateMany wiele (tu nie trzeba parametru {multi: true}).
Usuwanie, wg dowolnego selektora. Dla wielu deleteMany()
db.clients.deleteOne({selektor})
Create Read Actualise Delete
MongoDB Compass Community
GUI. Kompletna informacja o kolekcjach i dokumentach. Łatwy wizualny, sposób zarządzania bazami. W widoku tabeli dane muszą być spójne, w widoku listy niekoniecznie.
Node.js: mongodb
Instalacja: mongodb jest oficjalną paczką npm, wspieraną przez MongoDB (nieoficjalną, ale bardzo popularną jest mongoose).
npm i mongodb -S
Połączenie
const mongo = require('mongodb');
const client = new mongo.MongoClient('mongodb://host:port', {useNewUrlParser: true});
client.connect(err => {if (err) {console.log(err);}
else {console.log("Połączenie z bazą");
// tu wybór bazy i kolekcji
}});
Domyślny port: 27017.
W programie
const db = client.db('test'); // wybór bazy
const cars = db.collection('cars'); // wybór kolekcji
client.close(); // koniecznie na końcu programu
Wszystkie polecenia jak w shellu. Do wyświetlenia używa się metody find i callback z danymi. Pobranie danych z przekształceniem w tablicę:
clients.find({}).toArray((err, data) => {
if (err) {console.log(err);}
else {console.log(data);}
})
Potwierdzenie zapisu:
}, err => {
if (err) {console.log('Błąd' + err);}
else {console.log('Wszystko OK');}
}
Pobranie danych z bazy za pomocą process.argv:
const args = process.argv.splice(2);
Zapisanie głosu w quizie, metoda save(). Wcześniej zaimportowany model i router,
router.get('/', (req, res) => {
new Quiz({ title: 'Tytuł pytania', vote: 0}).save()
res.render("quiz", { title: "Quiz" });
})
Zapis do bazy
router.get('/', (req, res) => {
const newsData = new News({
title,
description
})
newsData.save((err)=>{console.log(err);})
});
res.render('admin/news-form', { title: 'Dodaj news'});
Walidacja: w funkcji zapisującej dane do bazy
router.get('/', (req, res) => {
const body = req.body;
const newsData = new News(body);
const errors = newsData.validateSync();
errors przekazać w funkcji res.render(). Potem w szablonie:
if errors.errors !== undefined
each message in errors.errors
p=message
- MongoDB Node.JS Driver
- mongodb/node-mongodb-native Mongo DB Native NodeJS Driver
Node.js: mongoose
Niektóre metody mongoose wyglądają jak JS, ale mają inne działanie: exec, sort created itd
- mongoose - elegant mongodb object modeling for node.js
- "findOneAndUpdate() in Mongoose"
- Mastering JS Mongoose Tutorials
Odnośniki
Strony
- MongoDB - MongoDB Atlas Global Cloud Database | MongoDB Compass | MongoDB Community Live Events | MongoDB Developer Hub | Free MongoDB Official Courses | MongoDB University
- gudab MongoDB GUI | MongoDB Management Tool | Monitor MongoDB
- 3T Software Labs: MongoDB Tutorials
- Real-Time Dashboard Guide
- watscho/express-graphql-mongodb-boilerplate A boilerplate for Node.js web applications / API server / Authentication from scratch - express, graphql - (graphql compose), mongodb.
- JavaScript Teacher "A Complete MongoDB PWA Tutorial"
- Simple Cheat Sheet: MongoDB Cheat Sheet
- Stack Chief / MongoDB
- MongoDB | www.thecodebarbarian.com
- Quick Programming Tips "MongoDB History"
- MongoDB Tutorial for Beginners and SQL Pros | Academy 3T
- ObjectRocket MongoDB Knowledge Base
- MongoDB Knowledge Base
Narzędzia
- Harry-027 / mongo-cop MongoDB Migration Utility
- ramitmittal / mongraph A tool for visualizing mongodb records as a network of nodes.
Artykuły
- MongoDB Cheat Sheet - Essential MongoDB Shell Commands
- "Building MongoDB Dashboard using Node.js"
- Chris on Code - Create a CRUD App with Node and MongoDB Courses
- The modern course on deploying Node.js, Express and MongoDB with Docker and Kubernetes
- Nikita Kolmogorov "How to set up backups for MongoDB for free"
- Codez Up MongoDB Archives | "Data Modeling Concepts in MongoDB Tutorial"
- CodeWall: Piero Borrelli "NoSQL: A Gentle Introduction Using MongoDB" | "NoSQL: Building Your First Application & Connecting To MongoDB" | "NoSQL: Updating Data In A MongoDB Database" | "NoSQL: Deleting Data In A MongoDB Database" | "NoSQL: A Complete Overview Of Testing Using Mocha" | "NoSQL: Updating Data In A MongoDB Database" | Piero Borrelli "NoSQL: Retrieving Data from a MongoDB Database" | Piero Borrelli "NoSQL: Introduction to Testing MongoDB Applications using Mocha" | Dan Englishby "MongoDB Beginner Tutorial With Compass GUI & The Mongo Shell CLI"
- "Simple and Easy way to connect MongoDB Atlas with Spring Boot"
- Medium: Ross Bulat "Using Promises, async / await with MongoDB" | Studio 3T "3 Lessons from 7 Years of Building a GUI for MongoDB" | Jack Kelly "Create a Full-Stack web application using React, Strapi, Nginx, MongoDB, and DigitalOcean" | Alireza Mortazavi "MongoDB vs SQL Databases [Tech Debates]" | Sergio Perez "Connecting to MongoDB Atlas" | jelo rivera "Let’s build a full stack MongoDB, React, Node and Express (MERN) app" | Hussein Nasser "MongoDB internal Architecture"
- Rahul Raj "MongoDB Tips and Tricks for Querying Collections"
- morioh: Most Sara "How to build a Simple Beginner App with Node.js, Bootstrap and MongoDB" | Noah Saunders "How to Build CRUD Application using Node.js and MongoDB?"
- Krissanawat Kaewsanmuang "Create simple POS with React.js, Node.js, and MongoDB #8: CRUD POS Machine"
- Chinmaya Pati "Self-Hosted MongoDB"
- "Cassandra Vs MongoDB In 2018"
- A user signup process with email verification implemented with RESTHeart and MongoDB
- Krissanawat Kaewsanmuang "Create simple POS with React.js, Node.js, and MongoDB #14: Export PDF, Excel, CSV, Bulk Delete, Inline Editing"
- Ben Rogojan "3 Ways to Offload Read-Heavy Applications from MongoDB"
Expressjs
Youtube
- Playlisty: r2schools "MongoDB Tutorials" [YT playlist 15 filmów] | codedamn "MongoDB Tutorials" [YT playlist 12 filmów] | codedamn "MongoDB Aggregation Framework Tutorials" [YT playlist 11 filmów] | "Learn MongoDB - MongoDB Tutorial for Beginners - Getting Started with MongoDB - Part 1/3" [YT 4:03:20] | Coding Shiksha: MongoDB Tutorial for Absolute Beginners in 2019 [YT playlist 12 filmów] | SQLInSix Minutes "The MongoDB 103" [YT playlista 123 filmy] | Tyler Potts - Learn Firebase [YT playlist 12 filmów] | The Full Stack Junkie "MongoDB Crash Course" [YT playlist 4 filmy]
- Filmy: Twórca Stron "MongoDB + Node.js - kurs w 60 minut" [YT 55:59] | Academind "SQL vs NoSQL or MySQL vs MongoDB" [YT 21:29] | Eduonix Learning Solutions "[MongoDB Tutorials] | Customer Database Project (2019) | Eudonix" [YT 43:36] | GreyCampus Academy "Part 5 - How to Run Queries in MongoDB? | Free Course on Big Data for Beginners" [YT 47:34] | The Net Ninja "MongoDB Tutorial for Beginners" [16 filmów] | Codevolution "MongoDB Tutorial for Beginners" [YT playlist 24 filmy] | Academind "MongoDB Complete Introduction & Summary" [YT 41:16]
- Node.js + Express + MongoDB freeCodeCamp.org "How to Build a RESTful API using Node, Express, and Mongo" [YT 1:38:54] | yoursTRULY "REST API using NodeJS and MongoDB" [YT playlist 18 filmów] Traversy Media "MongoDB In 30 Minutes" [YT 32:11] | Traversy Media "MongoDB In The Cloud With Atlas" [14:52] | Traversy Media "MongoDB Crash Course" [36:42] | MVP Engineer "Learn MongoDB using Python MongoEngine | Python MongoDB tutorial" [YT 15:37]
NeDB
- louischatriot/nedb The JavaScript Database, for Node.js, nw.js, electron and the browser
- NeDB
Firebase
- "Build Progressive Web Apps PWA with React and Firebase"
- "Firebase Cloud Storage How-to and Use Case"
- Didin J "React JS Tutorial: Building Firebase Chat App (React Hooks)"
- freeCodeCamp.org freeCodeCamp.org "Full Stack React & Firebase Tutorial - Build a social media app" [12:05:30] | freeCodeCamp.org "Intermediate React and Firebase Tutorial - Build an Evernote Clone" [YT 1:49:49]
- The Net Ninja The Net Ninja "Firebase Functions" [YT playlist 19 filmów] | The Net Ninja "Firebase Hosting Tutorial" [YT playlist 5 filmów] | The Net Ninja "Firebase Firestore Tutorial" [YT playlist 10 filmów] | The Net Ninja "Firebase Auth Tutorial" [YT playlist 24 filmy] | The Net Ninja "Flutter & Firebase App Build" [YT playlist 28 filmów]
- Fireship [YT (242)] | Tyler Potts "Learn Firebase" [YT playlist 12 filmów]