pomoc do lab. - Instytut Informatyki Teoretycznej i Stosowanej
Transkrypt
pomoc do lab. - Instytut Informatyki Teoretycznej i Stosowanej
mongodb, Express.js mongodb, Express.js Technologie Zarządzania Treścią dr inż. Robert Perliński [email protected] Politechnika Częstochowska Instytut Informatyki Teoretycznej i Stosowanej 6 grudnia 2016 1/15 Oficjalny sterownik MongoDB dla Node.js Oficjalny sterownik MongoDB dla Node.js: oferuje obsługę bazy MongoDB za pomocą wywołań zwrotnych oraz obietnic, pozwala to na wykorzystanie wszystkich zalet ES6, zawiera wsparcie dla specyfikacji wspóldzielonego API CRUD zawiera wsparcie dla Server Discovery and Monitoring Specification, obecna wersja sertownika to 2.2, https://mongodb.github.io/node-mongodb-native/ instalacja: npm install mongodb --save mongodb, Express.js 2/15 Połączenie się z bazą danych w adresie url określamy: sterownik, nazwę hosta, port i bazę danych, z którą chcemy się połączyć, metoda connect() wykorzystuje adres url, po połączeniu wywołuje funkcję mającą dostęp do bazy (obiekt db) albo zwraca błąd (err) db.close() - zamyka połączenie var MongoClient = require('mongodb').MongoClient; var ObjectID = require('mongodb').ObjectID; var assert = require('assert'); // Dane do połączenia w adresie URL var url = 'mongodb://localhost:27017/lab08'; MongoClient.connect(url, function(err, db) { assert.equal(null, err); console.log("Nawiązano połączenie z serwerem"); // ... db.close(); }); mongodb, Express.js 3/15 Pobranie danych z kolekcji łączymy się z bazą, obiekt db przekazujemy do tworzonej funkcji wywołanie funkcj zwrotnie zamknie połączenie z bazą danych MongoClient.connect(url, function(err, db) { assert.equal(null, err); console.log("Nawiązano połączenie z serwerem"); listaMiejsc(db, function() { db.close(); }); }); Lista miejsc: [ { _id: 583c99f27ef6aaeb8d657ee6, nazwa: 'Zielona Góra', url: 'http://www.zielona-gora.pl/' }, ... ] mongodb, Express.js 4/15 Pobranie danych z kolekcji - find().toArray() funkcja listaMiejsc posiada dwa parametry: db - pozwoli na dostęp do bazy danych, callback - wywołanie zwrotne, pozwoli zamknąć połączenie z bazą metoda db.collection(<kol>) pozwala na dostęp do wybranej kolekcji metoda find() zwraca kursor kursor poprzez metodę toArray() zwraca tablicę dokumentów albo błąd, trzeba zapewnić odpowiedną ilość pamięci do przechowania wyników var listaMiejsc = function(db, callback) { var collection = db.collection('miejsca'); collection.find({}).toArray(function(err, miejsca) { assert.equal(err, null); console.log("Lista miejsc:"); console.log(miejsca) callback(); // callback(miejsca); }); } mongodb, Express.js 5/15 Pobranie danych z kolekcji - find().next() tworzymy kursor metodą find() wykorzystując kursor odczytujemy tylko jeden dokument metoda next() kursora pozwala na dostęp do jednego pobranego dokumentu z pobranego dokumenty wyświetlamy nazwę i adres url var listaMiejsc2 = function(db, callback) { var collection = db.collection('miejsca'); var cur = collection.find({}); console.log("Lista miejsc:"); cur.next(function(err, m) { assert.equal(err, null); console.log(m.nazwa+" - "+m.url); callback(); // callback(miejsca); }); } Lista miejsc: Zielona Góra - http://www.zielona-gora.pl/ mongodb, Express.js 6/15 Pobranie danych z kolekcji - find().each() tworzymy kursor metodą find() wykorzystując kursor odczytujemy wszystkie dokumenty, jeden po drugim metoda each() kursora przechodzi przez całą kolekcję z pobranego dokumenty wyświetlamy nazwę i adres url var listaMiejsc3 = function(db, callback) { var collection = db.collection('miejsca'); // var cur = collection.find({}); // pakiet 'node-regexp' var cur = collection.find({nazwa:regexp().end("wa").toRegExp()}); console.log("Lista miejsc:"); cur.each(function(err, m) { assert.equal(err, null); if(m!==null) console.log(m.nazwa+" - "+m.url); callback(); // callback(miejsca); }); } Lista miejsc: Warszawa - http://www.warszawa.pl/ Częstochowa - http://www.czestochowa.pl/ mongodb, Express.js 7/15 Lista studentów - zwraca tablicę JSON dane do połączenia ustalane wewnątrz konkretnej motody get() użytkownik dodstaje dane w formacie tablicy JSON app.get('/studenci', function (req, res) { var url2 = 'mongodb://localhost:27017/lab08'; MongoClient.connect(url2, function(err, db) { var studenci = db.collection('studenci'); studenci.find().toArray(function(err, st) { res.send(st); db.close(); }); }); }) // wynik [ {"_id":"583ae67fdfb59518ad53b751","imie":"Jan","nazwisko":"Kowalski", "wydzial":"583ad919beeec1288f74d8bd"}, ..., {"_id":"583cb8f4ea838daa1c783bf9","imie":"Robert","nazwisko":"Radecki", "wydzial":"583ad919beeec1288f74d8bd"} ] mongodb, Express.js 8/15 Lista studentów - lista wybranych pól dane do połączenia ustalane wewnątrz konkretnej motody get() dane zweracane użytkownikowi dobrane według potrzeb app.get('/studenci2', function (req, res) { var url2 = 'mongodb://localhost:27017/lab08'; MongoClient.connect(url2, function(err, db) { var studenci = db.collection('studenci'); studenci.find().toArray(function(err, st) { var napis = 'Liczba studentów: '+st.length+'<br>'; for(var i=0; i<st.length; i++) { napis += i+1 + ". " + st[i].imie + ' ' + st[i].nazwisko + "<br>"; } res.send(napis); db.close(); }); }); }) // wynik Liczba studentów: 20 1. Jan Kowalski 2. Halina Nowak ... mongodb, Express.js 9/15 Dodawanie pojedynczego dokumentu - insertOne() metoda indertOne() zwraca błąd albo liczbę dodanych dokumentów, posiada dwa parametry nie ma tutaj wywołania zwrotnego po zakończeniu dodawania var dodajMiejsce = function(db, callback) { var collection = db.collection('miejsca'); collection.insertOne( {nazwa:"Zamość", url:"http://www.zamosc.pl/"}, function(err, r) { assert.equal(null, err); assert.equal(1, r.insertedCount); db.close(); console.log("Dodano dokument"); } ); } mongodb, Express.js 10/15 Usunięcie pojedynczego dokumentu - deleteOne() metoda deleteOne() zwraca błąd albo liczbę usuniętych dokumentów, posiada dwa parametry nie ma tutaj wywołania zwrotnego po zakończeniu dodawania var usunMiejsce = function(db, idMiejsca, callback) { var collection = db.collection('miejsca'); collection.deleteOne({_id: idMiejsca}, function(err, r) { assert.equal(null, err); assert.equal(1, r.deletedCount); db.close(); console.log("Usunięto dokument"); }); } // wywołanie usunMiejsce(db, ObjectID("583cf53635c763404b57c13b")); mongodb, Express.js 11/15 Modyfikacja pojedynczego dokumentu - updateOne() metoda updateOne() zwraca błąd albo liczbę zmodyfikowanych dokumentów, posiada trzy parametry nie ma tutaj wywołania zwrotnego po zakończeniu dodawania var dodajKraj = function(db, miejsce, kraj, callback) { var collection = db.collection('miejsca'); collection.updateOne( {"nazwa":miejsce}, {$set: {"kraj": kraj}}, function(err, r) { assert.equal(null, err); assert.equal(1, r.matchedCount); assert.equal(1, r.modifiedCount); db.close(); console.log("Dodano nazwę kraju"); } ); } // wywołanie dodajKraj(db, "Warszawa", "Polska"); mongodb, Express.js 12/15 Najważniejsze metody klasy Collection I Najważniejsze metody klasy Collection (większość zwraca obietnice): aggregate(pipeline, options, callback) - wykonuje potok agregacji, zwraca AggregationCursor, count(query, options, callback) - zwraca liczbę dokumentów spełniających zapytanie, createIndex(fieldOrSpec, options, callback) - tworzy indeks na danej kolekcji, dropIndex(indexName, options, callback) - usuwa indeks z danej kolekcji, find(query) - tworzy kursor, którego używamy do pobrania danych, findOne(query, options, callback) - pobiera jeden dokument, pozostałe: findAndModify, findAndRemove, findOneAndDelete, findOneAndReplace, findOneAndUpdate deleteOne(filter, options, callback) - usuwa jeden dokument, mongodb, Express.js 13/15 Najważniejsze metody klasy Collection II deleteMany(filter, options, callback) - usuwa naraz wiele dokumentów, insertOne(doc, options, callback) - wstawia pojedynczy dokument, insertMany(docs, options, callback) - wstawia naraz wiele dokumentów, updateOne(filter, update, options, callback), updateMany(filter, update, options, callback), drop(options, callback) - usuwa całą kolekcję, remove(selector, options, callback) - usuwa dokument lub dokumenty, przestarzała, rename(newName, options, callback) - zmienia nazwę kolekcji, replaceOne(filter, doc, options, callback) - zamienia dopasowany na podany dokument. mongodb, Express.js 14/15 Najważniejsze metody klasy Cursor I Najważniejsze metody klasy Cursor (większość zwraca obietnice): count(applySkipLimit, options, callback) - liczba dokumentów tego kursora, each(callback) - iteruje po wszystkich elementach kursora, zaczyna od bieżącego położenia kursora, forEach(iterator, callback) - przechodzi przez wszystkie dokumenty kursora używając iteratora (w szablonie funkcji zwrotnej), hasNext(callback) - sprawdza czy są w kursorze jeszcze jakieś dokumenty, next(callback) - pobiera następny dokument z kursora albo zwraca null jeśli brak, toArray(callback) - zwraca całą tablicę dokumentów, które są pod kursorem, filter(filter) - pozwala na ustawienie zapytania, które ustala dokumenty kursora, project(value) - ustala pola dokumentów dostępnych przez kursor. mongodb, Express.js 15/15