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

Podobne dokumenty