Popularność baz NoSQL w ostatnim czasie wzrosła. Jedną z najbardziej popularnych i coraz częściej stosowanych jest baza MongoDB. Rozpoczynając pracę z każdą z baz NoSQL trzeba nie tylko zmienić sposób myślenia o bazach danych, lecz również nauczyć się innych reguł i zasad formułowania zapytań dla operacji CRUD (ang. create, read, update and delete), czyli tworzenia, odczytywania, aktualizacji i usuwania danych. Poniżej przedstawię kilka najważniejszych poleceń. Więcej o operacjach CRUD można znaleźć w oficjalnej dokumentacji MongoDB.
Środowisko do testów bazy MongoDB
W szybki i prosty sposób można zestawić środowisko do testów operacji CRUD na bazie MongoDB przy użyciu Docker’a, w którym trzeba znaleźć i pobrać obraz mongo, a następnie uruchomić go i podłączyć się klientem mongo, co przedstawiono na 3 zrzutach ekranu.
Lista baz danych i kolekcji
> show dbs local 0.000GB test 0.000GB > use test switched to db test > show collections test
Dodawanie dokumentu do kolekcji
> db.test.insert({club_name: "Manchester United", num_players:27, budget:1500000}) WriteResult({ "nInserted" : 1 }) > db.test.insert({club_name: "Tottenham", num_players:25, budget:1200000}) WriteResult({ "nInserted" : 1 })
Wyszukiwanie dokumentów
> db.test.find() { "_id" : ObjectId("57af8abcf37fc4ad42306039"), "club_name" : "Manchester United", "num_players" : 27, "budget" : 1500000 } { "_id" : ObjectId("57af8ad2f37fc4ad4230603a"), "club_name" : "Tottenham", "num_players" : 25, "budget" : 1200000 } > db.test.find().pretty() { "_id" : ObjectId("57af8abcf37fc4ad42306039"), "club_name" : "Manchester United", "num_players" : 27, "budget" : 1500000 } { "_id" : ObjectId("57af8ad2f37fc4ad4230603a"), "club_name" : "Tottenham", "num_players" : 25, "budget" : 1200000 }
Złożone operacje wyszukiwania danych z dodatkowymi kryteriami oraz projekcją
> db.test.find({budget: {$gt:1300000}}) { "_id" : ObjectId("57af8abcf37fc4ad42306039"), "club_name" : "Manchester United", "num_players" : 27, "budget" : 1500000 } > db.test.find({budget: {$gt:1300000}}, {club_name: 1}) { "_id" : ObjectId("57af8abcf37fc4ad42306039"), "club_name" : "Manchester United" } > db.test.find({budget: {$gt:1300000}}, {club_name: 1}).limit(1) { "_id" : ObjectId("57af8abcf37fc4ad42306039"), "club_name" : "Manchester United" }
Aktualizacja dokumentów
> db.test.update( ... {budget: {$gt:100000}}, ... {$set: {league: "Premier League"}}, ... {multi: true} ... ) WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 1 }) > db.test.find({}).pretty() { "_id" : ObjectId("57af8abcf37fc4ad42306039"), "club_name" : "Manchester United", "num_players" : 27, "budget" : 1500000, "league" : "Premier League" } { "_id" : ObjectId("57af8ad2f37fc4ad4230603a"), "club_name" : "Tottenham", "num_players" : 25, "budget" : 1200000, "league" : "Premier League" }
Usuwanie dokumentów
> db.test.remove({num_players: 25}) WriteResult({ "nRemoved" : 1 }) > db.test.find({}).pretty() { "_id" : ObjectId("57af8abcf37fc4ad42306039"), "club_name" : "Manchester United", "num_players" : 27, "budget" : 1500000, "league" : "Premier League" }