MongoDB BSON Guide

1. Introduzione

In questo tutorial, esamineremo BSON e come possiamo usarlo per interagire con MongoDB.

Ora, una descrizione approfondita di MongoDB e di tutte le sue capacità va oltre lo scopo di questo articolo. Tuttavia, sarà utile comprendere alcuni concetti chiave.

MongoDB è un motore di archiviazione di documenti NoSQL distribuito. I documenti vengono archiviati come dati BSON e raggruppati in raccolte. I documenti in una raccolta sono analoghi alle righe in una tabella di database relazionale .

Per uno sguardo più approfondito, dai un'occhiata all'articolo introduttivo di MongoDB.

2. Che cos'è BSON ?

BSON sta per Binary JSON . È un protocollo per la serializzazione binaria di dati simili a JSON.

JSON è un formato di scambio di dati popolare nei servizi Web moderni. Fornisce un modo flessibile per rappresentare strutture di dati complesse.

BSON offre diversi vantaggi rispetto all'utilizzo di JSON normale:

  • Compatto: nella maggior parte dei casi, l'archiviazione di una struttura BSON richiede meno spazio rispetto al suo equivalente JSON
  • Tipi di dati: BSON fornisce tipi di dati aggiuntivi non trovati in JSON normale, come Date e BinData

Uno dei principali vantaggi dell'utilizzo di BSON è che è facile da attraversare . I documenti BSON contengono metadati aggiuntivi che consentono una facile manipolazione dei campi di un documento, senza dover leggere l'intero documento stesso.

3. Il driver MongoDB

Ora che abbiamo una conoscenza di base di BSON e MongoDB, vediamo come usarli insieme. Ci concentreremo sulle azioni principali dall'acronimo CRUD ( C reate, R ead, U pdate , D elete).

MongoDB fornisce driver software per la maggior parte dei linguaggi di programmazione moderni. I driver sono basati sulla libreria BSON , il che significa che lavoreremo direttamente con l'API BSON durante la creazione delle query. Per ulteriori informazioni, consulta la nostra guida al linguaggio di query MongoDB.

In questa sezione, esamineremo l'utilizzo del driver per connettersi a un cluster e l'utilizzo dell'API BSON per eseguire diversi tipi di query. Si noti che il driver MongoDB fornisce una classe Filters che può aiutarci a scrivere codice più compatto. Per questo tutorial, tuttavia, ci concentreremo esclusivamente sull'utilizzo dell'API BSON principale.

In alternativa all'utilizzo diretto del driver MongoDB e di BSON, dai un'occhiata alla nostra guida Spring Data MongoDB.

3.1. Collegamento

Per iniziare, aggiungiamo prima il driver MongoDB come dipendenza nella nostra applicazione:

 org.mongodb mongodb-driver-sync 3.10.1 

Quindi creiamo una connessione a un database e una raccolta MongoDB:

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

Le sezioni rimanenti esamineranno la creazione di query utilizzando il riferimento alla raccolta .

3.2. Inserire

Supponiamo di avere il seguente JSON che vogliamo inserire come nuovo documento in una raccolta di dipendenti :

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

Questo esempio JSON mostra i tipi di dati più comuni che incontreremmo con i documenti MongoDB: testo, numerico, array e documenti incorporati.

Per inserirlo utilizzando BSON, utilizzeremo l' API del documento di MongoDB :

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); 

La classe Document è l'API principale utilizzata in BSON. Estende l' interfaccia Java Map e contiene diversi metodi sovraccaricati. Ciò semplifica il lavoro con tipi nativi e oggetti comuni come ID oggetto, date ed elenchi.

3.3. Trova

Per trovare un documento in MongoDB, forniamo un documento di ricerca che specifica su quali campi eseguire la query. Ad esempio, per trovare tutti i documenti che hanno un cognome "Smith", utilizzeremo il seguente documento JSON:

{ "last_name": "Smith" }

Scritto in BSON questo sarebbe:

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

Le query "Trova" possono accettare più campi e il comportamento predefinito è utilizzare l' operatore logico e per combinarli. Ciò significa che verranno restituiti solo i documenti che corrispondono a tutti i campi .

Per aggirare questo problema, MongoDB fornisce l' operatore di query or :

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

Verranno trovati tutti i documenti che hanno il nome "Joe" o il cognome "Smith". Per scrivere questo come BSON, useremmo un documento nidificato proprio come la query di inserimento sopra:

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

Update queries are a little different in MongoDB because they require two documents:

  1. The filter criteria to find one or more documents
  2. An update document specifying which fields to modify

For example, let's say we want to add a “security” skill to every employee that already has a “spring” skill. The first document will find all employees with “spring” skills, and the second one will add a new “security” entry to their skills array.

In JSON, these two queries would look like:

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

And in BSON, they would be:

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

Delete queries in MongoDB use the same syntax as find queries. We simply provide a document that specifies one or more criteria to match.

Ad esempio, supponiamo di aver trovato un bug nel nostro database dei dipendenti e di aver creato accidentalmente per i dipendenti un valore negativo per anni di servizio. Per trovarli tutti, useremmo il seguente JSON:

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

Il documento BSON equivalente sarebbe:

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

4. Conclusione

In questo tutorial, abbiamo visto un'introduzione di base alla creazione di query MongoDB utilizzando la libreria BSON. Utilizzando solo l'API BSON, abbiamo implementato operazioni CRUD di base per una raccolta MongoDB.

Ciò che non abbiamo trattato sono argomenti più avanzati come proiezioni, aggregazioni, query geospaziali, operazioni in blocco e altro ancora. Tutto ciò è possibile utilizzando solo la libreria BSON. Gli esempi che abbiamo visto qui costituiscono i mattoni che useremmo per implementare queste operazioni più avanzate.

Come sempre, puoi trovare gli esempi di codice sopra nel nostro repository GitHub.