Ръководство за MongoDB BSON

1. Въведение

В този урок ще разгледаме BSON и как можем да го използваме за взаимодействие с MongoDB.

Сега задълбочено описание на MongoDB и всички негови възможности е извън обхвата на тази статия. Ще бъде полезно обаче да разберете няколко ключови понятия.

MongoDB е разпределена, NoSQL машина за съхранение на документи. Документите се съхраняват като BSON данни и се групират в колекции. Документите в колекция са аналогични на редове в релационна таблица на базата данни .

За по-задълбочен поглед, погледнете уводната статия на MongoDB.

2. Какво е BSON ?

BSON означава Binary JSON . Това е протокол за двоична сериализация на JSON-подобни данни.

JSON е формат за обмен на данни, който е популярен в съвременните уеб услуги. Той осигурява гъвкав начин за представяне на сложни структури от данни.

BSON предоставя няколко предимства пред използването на обикновен JSON:

  • Компактен: В повечето случаи съхраняването на BSON структура изисква по-малко място от еквивалента на JSON
  • Типове данни: BSON предоставя допълнителни типове данни, които не се намират в обикновения JSON, като Date и BinData

Едно от основните предимства на използването на BSON е, че е лесно да се премине . Документите на BSON съдържат допълнителни метаданни, които позволяват лесно манипулиране на полетата на документ, без да се налага да се чете целият документ.

3. Драйверът на MongoDB

Сега, когато имаме основно разбиране за BSON и MongoDB, нека разгледаме как да ги използваме заедно. Ще се съсредоточим върху основните действия от CRUD акронима ( C reate, R ead, U pdate, D elete).

MongoDB предоставя софтуерни драйвери за повечето съвременни езици за програмиране. Драйверите са изградени върху BSON библиотеката , което означава, че ще работим директно с BSON API, когато изграждаме заявки. За повече информация вижте нашето ръководство за езика на заявките MongoDB.

В този раздел ще разгледаме използването на драйвера за свързване към клъстер и използването на BSON API за извършване на различни видове заявки. Имайте предвид, че драйверът MongoDB предоставя клас Filters, който може да ни помогне да напишем по-компактен код. За този урок обаче ще се съсредоточим единствено върху използването на основния API на BSON.

Като алтернатива на директното използване на драйвера MongoDB и BSON, разгледайте нашето ръководство Spring Data MongoDB.

3.1. Свързване

За да започнем, първо добавяме драйвера MongoDB като зависимост в нашето приложение:

 org.mongodb mongodb-driver-sync 3.10.1 

След това създаваме връзка с база данни и колекция на MongoDB:

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

Останалите раздели ще разгледат създаването на заявки с помощта на справка за колекцията .

3.2. Поставете

Да приемем, че имаме следния JSON, който искаме да вмъкнем като нов документ в колекция от служители :

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

Този пример JSON показва най-често срещаните типове данни, които бихме срещнали с документи на MongoDB: текст, числови, масиви и вградени документи.

За да вмъкнем това с помощта на BSON, бихме използвали API за документи на 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); 

Класът Document е основният API, използван в BSON. Той разширява интерфейса на Java Map и съдържа няколко претоварени метода. Това улеснява работата с естествени типове, както и с общи обекти като идентификатори на обекти, дати и списъци.

3.3. намирам

За да намерим документ в MongoDB, ние предоставяме документ за търсене, който указва кои полета да бъдат заявени. Например, за да намерим всички документи с фамилно име „Смит“, бихме използвали следния JSON документ:

{ "last_name": "Smith" }

Написано в BSON това би било:

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

Заявките „Намери“ могат да приемат множество полета и поведението по подразбиране е да се използва логиката и операторът, за да се комбинират. Това означава, че ще бъдат върнати само документи, които съответстват на всички полета .

За да заобиколите това, MongoDB предоставя оператора или заявка:

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

Това ще намери всички документи, които имат или собствено име „Джо“, или фамилия „Смит“. За да напишем това като BSON, бихме използвали вложен документ точно като заявката за вмъкване по-горе:

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. Актуализиране

Заявките за актуализация са малко по-различни в MongoDB, защото изискват два документа :

  1. Критериите за филтриране за намиране на един или повече документи
  2. Документ за актуализация, посочващ кои полета да се модифицират

Да кажем например, че искаме да добавим умение за „сигурност“ към всеки служител, който вече има умение „пролет“. Първият документ ще намери всички служители с „пролетни“ умения, а вторият ще добави нов запис „сигурност“ към техния набор от умения.

В JSON тези две заявки ще изглеждат така:

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

И в BSON те биха били:

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. Изтрий

Изтриването на заявки в MongoDB използва същия синтаксис като заявките за търсене. Ние просто предоставяме документ, който посочва един или повече критерии, които да отговарят.

Да предположим например, че открихме грешка в нашата база данни на служителите и случайно създадохме служители с отрицателна стойност за години на служба. За да ги намерим всички, бихме използвали следния JSON:

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

Еквивалентният BSON документ ще бъде:

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

4. Заключение

В този урок видяхме основно въведение в изграждането на заявки на MongoDB с помощта на библиотеката BSON. Използвайки само BSON API, ние внедрихме основни CRUD операции за колекция MongoDB.

Това, което не сме обхванали, са по-напреднали теми като прогнози, агрегиране, геопространствени заявки, групови операции и др. Всичко това е възможно само с помощта на библиотеката BSON. Примерите, които видяхме тук, образуват градивните елементи, които бихме използвали за изпълнението на тези по-усъвършенствани операции.

Както винаги, можете да намерите примерите за кодове по-горе в нашето репо GitHub.