MongoDB i mgo - czyli kilka słów o bazie danych dla języka Go

 | 

Podczas projektowania aplikacji internetowych ważny jest dobór narzędzi - powinny być dostosowane do potrzeb. Nie ma sensu wprowadzać do projektu niczego na wyrost, czegoś co ma lepsze zastosowanie w innego typu projektach. Wyjątkiem od tej reguły są aplikacje tworzone dla zabicia rutyny lub szkoleniowe. MongoDB jest właśnie takim narzędziem. Gdyby nie konkurs Daj Się Poznać, w którym obecnie biorę udział, pewnie jeszcze długo nie znalazłbym czasu, by przetestować go w praktyce.

Instalacja, uruchomienie MongoDB

Zainstalowanie i uruchomienie MongoDB jest bardzo proste. Przez wszystkie kroki instalacji prowadzi nas przejrzysty tutorial. Po zakończonej instalacji (w zależności od OS) wpisujemy komendę do uruchomienia usługi mongod. Jeżeli wszystko pójdzie gładko, naszym oczom powinien ukazać się komunikat podobny do tego:

2017-03-09T18:34:05.500+0100 I NETWORK [thread1] waiting for connections on port 27017

Nasza baza jest uruchomiona i czeka na połączenie z nią. Do testu wykorzystamy drugą konsolę. Komenda mongo otworzy na shella bazy danych, natomiast sama baza zakomunikuje o połączeniu do niej:

2017-03-09T18:37:42.001+0100 I NETWORK [thread1] connection accepted from 127.0.0.1:52151 #1 (1 connection now open)

mgo - połączenie

W łączeniu się z bazą danych oraz w wykonywaniu operacji na niej pomoże mi biblioteka mgo w wersji 2. Z zainstalowaniem pakietu przez komendę go get gopkg.in/mgo.v2 miałem lekkie perturbacje, dlatego by nie tracić zbytnio czasu na rozwiązywanie tego problemu, pociągnąłem wersję bezpośrednio z repozytorium na GitHubie. Wyzwaniem była reorganizacja kodu. Metoda do połączenia z bazą trafiła póki co do pliku server.go.

func getSession() *mgo.Session {
  fmt.Println("get session")
  session, error := mgo.Dial("mongodb://localhost")

  if error != nil {
    panic(error)
  }

  return session
}

Nie ma tutaj żadnych haczyków, korzystamy z biblioteki mgo, by stworzyć sesję z naszą lokalną bazą danych. W międzyczasie została dopisana metoda do tworzenia produktu (o tym będzie w osobnym wpisie), więc test w konsoli zakończył się powodzeniem:

$ curl -XPOST -H 'Content-Type: application/json' -d '{"name": "Szynka z 9 marca"}' http://localhost:8001/product

Wynik:

{"id":"58c19cc71c4e63572e45e3f4","name":"Szynka z 9 marca"}

I jeszcze z basha dla komendy db.products.find():

{ "_id" : ObjectId("58c19cc71c4e63572e45e3f4"), "name" : "Szynka z 9 marca" }

Aktualizacja 21 grudnia 2023

Od czasu powstania tego artykułu, w Go oraz MongoDB wiele się zmieniło. Używana przeze mnie paczka gopkg.in/mgo.v2 jest przestarzała. Obecnie zaleca się stosowanie nowszej i bardziej rozbudowanej paczki go.mongodb.org/mongo-driver/mongo.


Profile picture

Dawid Ryłko
Github | Twitter | Linkedin

Copyright © 2024 Dawid Ryłko