sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB BSON guide

1. Introduktion

I dette selvstudie vil vi se på BSON, og hvordan vi kan bruge det til at interagere med MongoDB.

Nu er en dybdegående beskrivelse af MongoDB og alle dens muligheder uden for denne artikels omfang. Det vil dog være nyttigt at forstå nogle få nøglebegreber.

MongoDB er en distribueret, NoSQL dokumentlagringsmotor. Dokumenter gemmes som BSON-data og grupperes i samlinger. Dokumenter i en samling er analoge med rækker i en relationel databasetabel .

For et mere dybtgående kig, se den indledende MongoDB-artikel.

2. Hvad er BSON ?

BSON står for Binary JSON . Det er en protokol til binær serialisering af JSON-lignende data.

JSON er et dataudvekslingsformat, der er populært i moderne webtjenester. Det giver en fleksibel måde at repræsentere komplekse datastrukturer på.

BSON giver flere fordele i forhold til at bruge almindelig JSON:

  • Kompakt:I de fleste tilfælde kræver lagring af en BSON-struktur mindre plads end dens JSON-ækvivalent
  • Datatyper:BSON leverer yderligere datatyper ikke fundet i almindelig JSON, såsom Dato og BinData

En af de største fordele ved at bruge BSON er, at det er nemt at krydse . BSON-dokumenter indeholder yderligere metadata, der giver mulighed for nem manipulation af felterne i et dokument uden at skulle læse hele dokumentet selv.

3. MongoDB-driveren

Nu hvor vi har en grundlæggende forståelse af BSON og MongoDB, lad os se på, hvordan man bruger dem sammen. Vi vil fokusere på de vigtigste handlinger fra CRUD akronymet (C reate, R ead, U pdate, D slette).

MongoDB leverer softwaredrivere til de fleste moderne programmeringssprog. Driverne er bygget oven på BSON-biblioteket , hvilket betyder, at vi arbejder direkte med BSON API'et, når vi bygger forespørgsler. For mere information, se vores guide til MongoDB-forespørgselssproget.

I dette afsnit vil vi se på at bruge driveren til at oprette forbindelse til en klynge og bruge BSON API til at udføre forskellige typer forespørgsler. Bemærk, at MongoDB-driveren giver et Filtre klasse, der kan hjælpe os med at skrive mere kompakt kode. Til denne vejledning vil vi dog udelukkende fokusere på at bruge kerne-BSON API.

Som et alternativ til at bruge MongoDB-driveren og BSON direkte, kan du tage et kig på vores Spring Data MongoDB-guide.

3.1. Tilslutter

For at komme i gang tilføjer vi først MongoDB-driveren som en afhængighed i vores applikation:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>3.10.1</version>
</dependency>

Derefter opretter vi en forbindelse til en MongoDB-database og samling:

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection<Document> collection = database.getCollection("employees");

De resterende sektioner vil se på oprettelse af forespørgsler ved hjælp af samlingen reference.

3.2. Indsæt

Lad os sige, at vi har følgende JSON, som vi ønsker at indsætte som et nyt dokument i en medarbejder samling:

{
  "first_name" : "Joe",
  "last_name" : "Smith",
  "title" : "Java Developer",
  "years_of_service" : 3,
  "skills" : ["java","spring","mongodb"],
  "manager" : {
     "first_name" : "Sally",
     "last_name" : "Johanson"
  }
}

Dette eksempel på JSON viser de mest almindelige datatyper, vi ville støde på med MongoDB-dokumenter:tekst, numeriske, arrays og indlejrede dokumenter.

For at indsætte dette ved hjælp af BSON, ville vi bruge MongoDB's Dokument 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);

Dokumentet klasse er den primære API, der bruges i BSON. Det udvider Java kortet interface og indeholder flere overbelastede metoder. Dette gør det nemt at arbejde med indbyggede typer såvel som almindelige objekter såsom objekt-id'er, datoer og lister.

3.3. Find

For at finde et dokument i MongoDB, leverer vi et søgedokument, der specificerer, hvilke felter der skal forespørges på. For at finde alle dokumenter, der har efternavnet "Smith", ville vi f.eks. bruge følgende JSON-dokument:

{  
  "last_name": "Smith"
}

Skrevet i BSON ville dette være:

Document query = new Document("last_name", "Smith");
List results = new ArrayList<>();
collection.find(query).into(results);

"Find"-forespørgsler kan acceptere flere felter, og standardadfærden er at bruge de logiske og operatør til at kombinere dem. Dette betyder, at kun dokumenter, der matcher alle felter, vil blive returneret .

For at omgå dette, leverer MongoDB eller forespørgselsoperatør:

{
  "$or": [
    { "first_name": "Joe" },
    { "last_name":"Smith" }
  ]
}

Dette vil finde alle dokumenter, der enten har fornavnet "Joe" eller efternavnet "Smith". For at skrive dette som BSON, ville vi bruge et indlejret Dokument ligesom indsæt-forespørgslen ovenfor:

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. Opdater

Opdateringsforespørgsler er lidt anderledes i MongoDB, fordi de kræver to dokumenter :

  1. Filterkriterierne for at finde et eller flere dokumenter
  2. Et opdateringsdokument, der angiver, hvilke felter der skal ændres

Lad os f.eks. sige, at vi ønsker at tilføje en "sikkerheds"-færdighed til hver medarbejder, der allerede har en "forårskompetence". Det første dokument vil finde alle medarbejdere med "forårs"-færdigheder, og det andet vil tilføje en ny "sikkerheds"-indgang til deres kompetencer.

I JSON ville disse to forespørgsler se ud:

{
  "skills": { 
    $elemMatch:  { 
      "$eq": "spring"
    }
  }
}

{
  "$push": { 
    "skills": "security"
  }
}

Og i BSON ville de være:

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. Slet

Slet forespørgsler i MongoDB bruger samme syntaks som find forespørgsler. Vi leverer blot et dokument, der specificerer et eller flere kriterier, der skal matche.

Lad os f.eks. sige, at vi fandt en fejl i vores medarbejderdatabase og ved et uheld oprettede medarbejdere med en negativ værdi for mange års tjeneste. For at finde dem alle ville vi bruge følgende JSON:

{
  "years_of_service" : { 
    "$lt" : 0
  }
}

Det tilsvarende BSON-dokument ville være:

Document query = new Document(
  "years_of_service", 
  new Document("$lt", 0));
collection.deleteMany(query);

  1. 9 ClusterControl-funktioner, du ikke finder i andre databasestyringsværktøjer

  2. MongoDB grundlæggende selvstudie

  3. Redis vs. MongoDB:Sammenligning af In-Memory-databaser med Percona Memory Engine

  4. Hvordan får man alle nøgler, der matcher et bestemt mønster, fra en hash i redis?