1. Inleiding
In deze zelfstudie kijken we naar BSON en hoe we het kunnen gebruiken om te communiceren met MongoDB.
Nu valt een diepgaande beschrijving van MongoDB en al zijn mogelijkheden buiten het bestek van dit artikel. Het is echter handig om een paar belangrijke concepten te begrijpen.
MongoDB is een gedistribueerde NoSQL-documentopslagengine. Documenten worden opgeslagen als BSON-gegevens en gegroepeerd in collecties. Documenten in een verzameling zijn analoog aan rijen in een relationele databasetabel .
Voor een meer diepgaande kijk, bekijk het inleidende MongoDB-artikel.
2. Wat is BSON ?
BSON staat voor Binaire JSON . Het is een protocol voor binaire serialisatie van JSON-achtige gegevens.
JSON is een formaat voor gegevensuitwisseling dat populair is in moderne webservices. Het biedt een flexibele manier om complexe datastructuren weer te geven.
BSON biedt verschillende voordelen ten opzichte van het gebruik van reguliere JSON:
- Compact:in de meeste gevallen vereist het opslaan van een BSON-structuur minder ruimte dan het JSON-equivalent
- Gegevenstypen:BSON biedt aanvullende gegevenstypen niet gevonden in reguliere JSON, zoals Datum en BinData
Een van de belangrijkste voordelen van het gebruik van BSON is dat het gemakkelijk te doorkruisen is . BSON-documenten bevatten aanvullende metadata waarmee de velden van een document gemakkelijk kunnen worden bewerkt, zonder dat u het hele document zelf hoeft te lezen.
3. Het MongoDB-stuurprogramma
Nu we een basiskennis hebben van BSON en MongoDB, gaan we kijken hoe we ze samen kunnen gebruiken. We concentreren ons op de belangrijkste acties van het CRUD-acroniem (C reate, R ead, U pdate, D elete).
MongoDB biedt softwarestuurprogramma's voor de meeste moderne programmeertalen. De stuurprogramma's zijn bovenop de BSON-bibliotheek gebouwd , wat betekent dat we rechtstreeks met de BSON API zullen werken bij het bouwen van query's. Raadpleeg onze gids voor de MongoDB-querytaal voor meer informatie.
In deze sectie zullen we kijken naar het gebruik van het stuurprogramma om verbinding te maken met een cluster en het gebruik van de BSON API om verschillende soorten query's uit te voeren. Merk op dat het MongoDB-stuurprogramma een Filters . biedt class die ons kan helpen om compactere code te schrijven. Voor deze tutorial zullen we ons echter uitsluitend concentreren op het gebruik van de kern BSON API.
Als alternatief voor het rechtstreeks gebruiken van de MongoDB-driver en BSON, kunt u onze Spring Data MongoDB-gids bekijken.
3.1. Verbinden
Om te beginnen, voegen we eerst het MongoDB-stuurprogramma als afhankelijkheid toe aan onze applicatie:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>3.10.1</version>
</dependency>
Vervolgens maken we een verbinding met een MongoDB-database en -verzameling:
MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection<Document> collection = database.getCollection("employees");
De overige secties gaan over het maken van zoekopdrachten met behulp van de verzameling referentie.
3.2. Invoegen
Laten we zeggen dat we de volgende JSON hebben die we als een nieuw document willen invoegen in een werknemers collectie:
{
"first_name" : "Joe",
"last_name" : "Smith",
"title" : "Java Developer",
"years_of_service" : 3,
"skills" : ["java","spring","mongodb"],
"manager" : {
"first_name" : "Sally",
"last_name" : "Johanson"
}
}
Dit JSON-voorbeeld toont de meest voorkomende gegevenstypen die we zouden tegenkomen met MongoDB-documenten:tekst, numeriek, arrays en ingesloten documenten.
Om dit in te voegen met BSON, gebruiken we MongoDB's Document 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);
Het Document class is de primaire API die in BSON wordt gebruikt. Het breidt de Java Kaart uit interface en bevat verschillende overbelaste methoden. Dit maakt het gemakkelijk om zowel met native typen als met veelvoorkomende objecten te werken, zoals object-ID's, datums en lijsten.
3.3. Zoek
Om een document in MongoDB te vinden, bieden we een zoekdocument dat specificeert op welke velden moet worden gezocht. Om bijvoorbeeld alle documenten te vinden die de achternaam "Smith" hebben, gebruiken we het volgende JSON-document:
{
"last_name": "Smith"
}
Geschreven in BSON zou dit zijn:
Document query = new Document("last_name", "Smith");
List results = new ArrayList<>();
collection.find(query).into(results);
"Zoek"-query's kunnen meerdere velden accepteren en het standaardgedrag is om de logische en . te gebruiken operator om ze te combineren. Dit betekent dat alleen documenten die met alle velden overeenkomen, worden geretourneerd .
Om dit te omzeilen, biedt MongoDB de of query-operator:
{
"$or": [
{ "first_name": "Joe" },
{ "last_name":"Smith" }
]
}
Hiermee worden alle documenten gevonden die ofwel de voornaam "Joe" of de achternaam "Smith" hebben. Om dit als BSON te schrijven, gebruiken we een genest Document net als de invoegquery hierboven:
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. Bijwerken
Update-query's zijn een beetje anders in MongoDB omdat ze twee documenten vereisen :
- De filtercriteria om een of meer documenten te vinden
- Een updatedocument waarin wordt aangegeven welke velden moeten worden gewijzigd
Laten we bijvoorbeeld zeggen dat we een "beveiligingsvaardigheid" willen toevoegen aan elke werknemer die al een "lente" -vaardigheid heeft. Het eerste document zal alle werknemers met "spring"-vaardigheden vinden, en het tweede zal een nieuw "beveiligings"-item toevoegen aan hun vaardighedenarray.
In JSON zouden deze twee zoekopdrachten er als volgt uitzien:
{
"skills": {
$elemMatch: {
"$eq": "spring"
}
}
}
{
"$push": {
"skills": "security"
}
}
En in BSON zouden ze zijn:
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. Verwijderen
Verwijderquery's in MongoDB gebruiken dezelfde syntaxis als zoekquery's. We leveren gewoon een document dat een of meer criteria specificeert om aan te voldoen.
Laten we bijvoorbeeld zeggen dat we een bug in onze medewerkersdatabase hebben gevonden en per ongeluk medewerkers hebben gemaakt met een negatieve waarde voor dienstjaren. Om ze allemaal te vinden, zouden we de volgende JSON gebruiken:
{
"years_of_service" : {
"$lt" : 0
}
}
Het equivalente BSON-document zou zijn:
Document query = new Document(
"years_of_service",
new Document("$lt", 0));
collection.deleteMany(query);