Рубрики
Без рубрики

Руководство MongoDB BSON

Узнайте, как взаимодействовать с MongoDB с помощью BSON.

Автор оригинала: Michael Pratt.

1. введение

В этом уроке мы рассмотрим BSON и то, как мы можем использовать его для взаимодействия с MongoDB .

Теперь подробное описание MongoDB и всех его возможностей выходит за рамки этой статьи. Однако будет полезно понять несколько ключевых понятий.

MongoDB-это распределенный механизм хранения документов NoSQL. Документы хранятся в виде данных BSON и группируются в коллекции. Документы в коллекции аналогичны строкам в таблице реляционной базы данных .

Для более детального взгляда взгляните на вводную статью MongoDB .

2. Что Такое BSON?

BSON расшифровывается как Binary JSON . Это протокол для двоичной сериализации JSON-подобных данных.

JSON-это формат обмена данными, популярный в современных веб-сервисах. Он обеспечивает гибкий способ представления сложных структур данных.

BSON предоставляет несколько преимуществ по сравнению с использованием обычного JSON:

  • Компактность: В большинстве случаев хранение структуры a BSON требует меньше места, чем ее эквивалент JSON
  • Типы данных: BSON предоставляет дополнительные типы данных не найденные в обычном JSON, такие как Date и BinData

Одно из главных преимуществ использования BSON заключается в том, что его легко пересечь . Документы BSON содержат дополнительные метаданные, которые позволяют легко манипулировать полями документа, не читая сам документ целиком.

3. Драйвер MongoDB

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

MongoDB предоставляет программные драйверы для большинства современных языков программирования. Драйверы построены поверх библиотеки BSON , что означает, что мы будем работать непосредственно с API BSON при построении запросов. Дополнительные сведения см. в нашем руководстве по языку запросов MongoDB .

В этом разделе мы рассмотрим использование драйвера для подключения к кластеру и использование API BSON для выполнения различных типов запросов. Обратите внимание, что драйвер MongoDB предоставляет Filters class , который может помочь нам написать более компактный код. Однако в этом уроке мы сосредоточимся исключительно на использовании основного API BSON.

В качестве альтернативы непосредственному использованию драйвера MongoDB и BENSON ознакомьтесь с нашим руководством Spring Data MongoDB guide .

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

Остальные разделы будут посвящены созданию запросов с использованием ссылки collection .

3.2. Вставить

Допустим, у нас есть следующий JSON, который мы хотим вставить в качестве нового документа в коллекцию employees :

{
  "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, мы использовали бы MongoDB 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);

Класс 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" }
  ]
}

Это позволит найти все документы, которые имеют либо имя “Джо”, либо фамилию “Смит”. Чтобы написать это как можно СКОРЕЕ, мы будем использовать вложенный документ точно так же, как запрос insert выше:

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"
  }
}

И в БСОНЕ они были бы:

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 в MongoDB используют тот же синтаксис, что и запросы find. Мы просто предоставляем документ, который определяет один или несколько критериев для соответствия.

Например, допустим, мы нашли ошибку в нашей базе данных сотрудников и случайно создали сотрудников а с отрицательным значением за годы службы. Чтобы найти их все, мы использовали бы следующий JSON:

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

Эквивалентным документом BSON будет:

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

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

В этом уроке мы познакомились с базовым введением в построение запросов MongoDB с использованием библиотеки BSON. Используя только API BSON, мы реализовали основные операции CRUD для коллекции MongoDB.

То, что мы не рассмотрели, – это более сложные темы, такие как прогнозы, агрегации, геопространственные запросы, массовые операции и многое другое. Все это возможно только с помощью библиотеки BSON. Примеры, которые мы видели здесь, относятся к строительным блокам, которые мы будем использовать для реализации этих более сложных операций.

Как всегда, вы можете найти примеры кода выше в нашем репо GitHub .