MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB BSON ръководство

1. Въведение

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

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

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

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

2. Какво е BSON ?

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

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

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

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

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

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

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

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

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

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

3.1. Свързване

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

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

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

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("myDB");
MongoCollection<Document> 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, ще използваме Document на 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);

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

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 използват същия синтаксис като заявките за намиране. Ние просто предоставяме документ, който посочва един или повече критерии, които да съответстват.

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

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

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

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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Преглед на управлението на потребителите на MongoDB

  2. Да върне ли ограничен брой записи от определен тип, но неограничен брой други записи?

  3. Преобразуване на BSON в JSON документ в Java

  4. Въведение в типовете данни на MongoDB

  5. MongoDB какви са потребителят и паролата по подразбиране?