Klientem MongoDB w Node.js jest mongoose. Można go pobrać z menadżera pakietów poleceniem
npm install mongoose
Po dodaniu pakietu do serwera Node.js przy użyciu konstrukcji require, można rozpocząć pracę z MongoDB. Pakiet mongoose do CRUDowych operacji wykorzystuje obiekty typu Schema. Definiując taki obiekt podajemy jakiego typu pola znajdować się będą w naszych dokumentach. Dzięki temu, wstawiając dokument do bazy mamy pewność, że wstawione zostaną jedynie te pola, które zdefiniowaliśmy w schemacie. Mechanizm ten jest konfigurowalny poprzez opcję strict. Jeżeli ustawimy ją na false, to do bazy trafiać będą całe dokumenty. Jeden schemat mapowany będzie na jedną kolekcję w bazie przy zachowaniu zasad języka angielskiego. Na przykład schemat Car zmapowany zostanie do kolekcji cars. Poniżej prosta konfiguracja:
var mongoose = require('mongoose'); mongoose.connect('localhost','mongoosetest'); var schema = mongoose.Schema({ make: 'string', enginePower : 'number' }, {strict: false}); var Car = mongoose.model('Car', schema);
Dodawanie dokumentów do bazy przy odbieraniu wiadomości typu POST:
app.post('/store/', function(req, resp) { var nm = req.body.name; var pw = req.body.enginePower; var car = new Car({ make: nm, enginePower: pw, day: "17-03" }); car.save(function(err){ if(err){ resp.send({ ok: 'sth went wrong' }); } else{ resp.send({ ok: 'everything is fine' }); } }); });
Analogicznie pobieranie danych wykonujemy także na obiekcie modelu;
app.get('/store/:key', function(req, resp) { Car.find({make: req.params.key}, function(err, docs){ if(err) resp.send(501); else resp.send(docs); }) });
Funkcja find może przekazywać bardziej skomplikowane zapytania MongoDB, te same, które dostępne są w shellu bazy (program mongo.exe).
Z kolei aby usunąć obiekt, używamy funkcji remove wołanej również na modelu. Jako pierwszy parametr podaje się warunek.
app.del('/store/:key', function(req, resp) { Car.remove({make: req.params.key}, function(err, docs){ if(err) resp.send(500); else resp.send(200); }); });
Brak komentarzy:
Prześlij komentarz