1. Wprowadzenie
W tym samouczku przyjrzymy się BSON i sposobom wykorzystania go do interakcji z MongoDB.
Teraz szczegółowy opis MongoDB i wszystkich jego możliwości wykracza poza zakres tego artykułu. Jednak przydatne będzie zrozumienie kilku kluczowych pojęć.
MongoDB to rozproszony silnik przechowywania dokumentów NoSQL. Dokumenty są przechowywane jako dane BSON i pogrupowane w kolekcje. Dokumenty w kolekcji są analogiczne do wierszy w tabeli relacyjnej bazy danych .
Aby uzyskać bardziej szczegółowe informacje, zajrzyj do artykułu wprowadzającego MongoDB.
2. Co to jest BSON ?
BSON oznacza binarny JSON . Jest to protokół do binarnej serializacji danych typu JSON.
JSON to format wymiany danych popularny w nowoczesnych usługach internetowych. Zapewnia elastyczny sposób reprezentowania złożonych struktur danych.
BSON ma kilka zalet w porównaniu ze zwykłym JSON:
- Kompaktowy:w większości przypadków przechowywanie struktury BSON wymaga mniej miejsca niż jej odpowiednik JSON
- Typy danych:BSON zapewnia dodatkowe typy danych nie można znaleźć w zwykłym JSON, na przykład Data i BinData
Jedną z głównych zalet korzystania z BSON jest łatwość poruszania się . Dokumenty BSON zawierają dodatkowe metadane, które pozwalają na łatwą manipulację polami dokumentu, bez konieczności czytania całego dokumentu.
3. Sterownik MongoDB
Teraz, gdy mamy podstawową wiedzę na temat BSON i MongoDB, przyjrzyjmy się, jak używać ich razem. Skoncentrujemy się na głównych działaniach z akronimu CRUD (C reate, R ead, U pdata, D usuń).
MongoDB dostarcza sterowniki oprogramowania dla większości nowoczesnych języków programowania. Sterowniki są zbudowane na bazie biblioteki BSON , co oznacza, że podczas tworzenia zapytań będziemy pracować bezpośrednio z interfejsem API BSON. Aby uzyskać więcej informacji, zapoznaj się z naszym przewodnikiem po języku zapytań MongoDB.
W tej sekcji przyjrzymy się wykorzystaniu sterownika do łączenia się z klastrem oraz wykorzystaniu interfejsu API BSON do wykonywania różnych typów zapytań. Zwróć uwagę, że sterownik MongoDB udostępnia Filtry klasa, która pomoże nam napisać bardziej zwarty kod. Jednak w tym samouczku skupimy się wyłącznie na korzystaniu z podstawowego interfejsu API BSON.
Jako alternatywę dla bezpośredniego używania sterownika MongoDB i BSON, spójrz na nasz przewodnik Spring Data MongoDB.
3.1. Podłączanie
Aby rozpocząć, najpierw dodajemy sterownik MongoDB jako zależność do naszej aplikacji:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>3.10.1</version>
</dependency>
Następnie tworzymy połączenie z bazą danych MongoDB i kolekcją:
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection<Document> collection = database.getCollection("employees");
Pozostałe sekcje poświęcone będą tworzeniu zapytań przy użyciu kolekcji odniesienie.
3.2. Wstaw
Załóżmy, że mamy następujący JSON, który chcemy wstawić jako nowy dokument do pracowników kolekcja:
{
"first_name" : "Joe",
"last_name" : "Smith",
"title" : "Java Developer",
"years_of_service" : 3,
"skills" : ["java","spring","mongodb"],
"manager" : {
"first_name" : "Sally",
"last_name" : "Johanson"
}
}
Ten przykładowy plik JSON pokazuje najpopularniejsze typy danych, jakie napotkalibyśmy w dokumentach MongoDB:tekstowe, liczbowe, tablice i dokumenty osadzone.
Aby wstawić to za pomocą BSON, użyjemy Dokumentu MongoDB API:
Document employee = new Document()
.append("first_name", "Joe")
.append("last_name", "Smith")
.append("title", "Java Developer")
.append("years_of_service", 3)
.append("skills", Arrays.asList("java", "spring", "mongodb"))
.append("manager", new Document()
.append("first_name", "Sally")
.append("last_name", "Johanson"));
collection.insertOne(employee);
Dokument class jest podstawowym API używanym w BSON. Rozszerza Mapę Javy interfejs i zawiera kilka przeciążonych metod. Ułatwia to pracę z typami natywnymi, a także z typowymi obiektami, takimi jak identyfikatory obiektów, daty i listy.
3.3. Znajdź
Aby znaleźć dokument w MongoDB, udostępniamy dokument wyszukiwania, który określa pola do zapytania. Na przykład, aby znaleźć wszystkie dokumenty, które mają nazwisko „Kowalski”, użyjemy następującego dokumentu JSON:
{
"last_name": "Smith"
}
Napisane w BSON będzie to:
Document query = new Document("last_name", "Smith");
List results = new ArrayList<>();
collection.find(query).into(results);
Zapytania typu „Znajdź” mogą akceptować wiele pól, a domyślnym zachowaniem jest użycie logicznych i operatora, aby je połączyć. Oznacza to, że zostaną zwrócone tylko dokumenty pasujące do wszystkich pól .
Aby obejść ten problem, MongoDB udostępnia lub operator zapytania:
{
"$or": [
{ "first_name": "Joe" },
{ "last_name":"Smith" }
]
}
Spowoduje to wyszukanie wszystkich dokumentów, które mają imię „Joe” lub nazwisko „Kowalski”. Aby zapisać to jako BSON, użyjemy zagnieżdżonego Dokumentu tak jak powyższe zapytanie wstawiania:
Document query =
new Document("$or", Arrays.asList(
new Document("last_name", "Smith"),
new Document("first_name", "Joe")));
List results = new ArrayList<>();
collection.find(query).into(results);
3.4. Zaktualizuj
Kwerendy aktualizacji są nieco inne w MongoDB, ponieważ wymagają dwóch dokumentów :
- Kryteria filtrowania, aby znaleźć jeden lub więcej dokumentów
- Dokument aktualizacji określający, które pola należy zmodyfikować
Załóżmy na przykład, że chcemy dodać umiejętność „bezpieczeństwo” do każdego pracownika, który ma już umiejętność „wiosna”. Pierwszy dokument znajdzie wszystkich pracowników z „wiosennymi” umiejętnościami, a drugi doda nowy wpis „bezpieczeństwo” do ich tablicy umiejętności.
W JSON te dwa zapytania wyglądałyby tak:
{
"skills": {
$elemMatch: {
"$eq": "spring"
}
}
}
{
"$push": {
"skills": "security"
}
}
A w BSON byłyby to:
Document query = new Document(
"skills",
new Document(
"$elemMatch",
new Document("$eq", "spring")));
Document update = new Document(
"$push",
new Document("skills", "security"));
collection.updateMany(query, update);
3.5. Usuń
Usunięcia zapytań w MongoDB używają tej samej składni, co zapytania wyszukiwania. Po prostu dostarczamy dokument, który określa jedno lub więcej kryteriów do spełnienia.
Załóżmy na przykład, że znaleźliśmy błąd w naszej bazie danych pracowników i przypadkowo utworzyliśmy pracowników z ujemną wartością stażu pracy. Aby znaleźć je wszystkie, użyjemy następującego JSON:
{
"years_of_service" : {
"$lt" : 0
}
}
Odpowiednikiem dokumentu BSON będzie:
Document query = new Document(
"years_of_service",
new Document("$lt", 0));
collection.deleteMany(query);