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

CRUD-запросы MongoDB из Java и оболочки

В этом руководстве вы увидите рабочие примеры выполнения операций CRUD с MongoDB. Мы будем c… С тегами mongodb, java, spring boot, новички.

В этом руководстве вы увидите рабочие примеры для выполнения операций CRUD с MongoDB . Мы рассмотрим 3 клиента:

  • Оболочка MongoDB/| (поддерживает запросы JavaScript) Java & Spring Boot
  • : типизированный доступ через MongoRepository Java
  • : общий доступ через Documents/MongoCollection

Сначала убедитесь, что у вас есть доступ к экземпляру MongoDB. Существует множество дистрибутивов MongoDB, включая производственные серверы и облачные решения. Для этого руководства я рекомендую вам упростить задачу и установить MongoDB Community Server и MongoDB Compass локально.

Вы можете получить установку для сервера MongoDB здесь: https://www.mongodb.com/try/download/community . Во время установки вам будет задан вопрос, хотите ли вы установить MongoDB Compass. Обязательно снимите этот флажок, так как в конечном итоге вы можете получить (стабильную, но более старую) версию Compass, которая не поддерживает встроенную оболочку MongoDB. Помимо этого, вы можете просто перейти к стандартным настройкам и пройти весь процесс установки по своему усмотрению.

Затем выполните установку компаса, которую вы можете найти здесь: https://www.mongodb.com/products/compass . Обязательно выберите версию 1.22 или выше , таким образом, вы получите интегрированную оболочку MongoDB. После установки Compass покажет начальный экран. Просто перейдите к настройкам подключения по умолчанию и нажмите “Подключиться”.

В нижней части вашего графического интерфейса Compass вы увидите оболочку MongoDB. Мы начнем с поиска всех доступных баз данных и создания нашей собственной базы данных mydb :

> show databases
> use mydb

Теперь мы готовы создать наши первые документы:

> db.company.insertOne({name:"Amazon", marketCap:1600})
> db.company.insertOne({name:"Google", marketCap:1010, foundingYear:1998})

В MongoDB мы можем создавать коллекции, просто добавляя документ в коллекцию. Итак, выше мы создали коллекцию company неявно. Давайте взглянем на содержимое нашей коллекции:

> db.company.find()

Это вернет Amazon и Google в виде строк JSON. Здесь следует отметить две вещи:

  • Вы также можете просматривать/редактировать/вставлять документы с помощью графического интерфейса Compass
  • MongoDB не имеет схемы. Если вы внимательно посмотрите на документ Google, вы увидите, что у компании есть дополнительное поле год основания .

Хорошо, давайте запустим наш первый расширенный запрос на чтение :

> db.company.find({marketCap:{$gt:1500}})

Здесь наш запрос find использует $gt (больше) и возвращает только Amazon. Поддерживаются дополнительные фильтры запросов , например $eq , $lt , и т.д.

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

> db.company.find({foundingYear:1998})

Здесь мы ищем компанию с 1998 годом основания. Интересным моментом здесь является то, что не все компании содержат это поле, но MongoDB просто игнорирует компании без года основания.

Давайте изменим существующий документ:

> db.company.updateOne({name:"Google"},{$set:{name:"Alphabet"}})

Приведенная выше инструкция update One выполняет поиск компании с названием “Google” и изменяет название на “Alphabet”.

Чтобы завершить этот раздел, давайте удалим документ:

> db.company.deleteOne({name:"Alphabet"})

До сих пор мы рассматривали, как поэкспериментировать с MongoDB, используя оболочку MongoDB в качестве клиента. Однако в реальном приложении вы бы выполняли все взаимодействия с базой данных программно. Давайте перейдем к Java пример. В этом разделе мы используем интерфейс MongoRepository из Spring Boot . Этот способ доступа к базе данных можно рассматривать как ” typed “, поскольку все операции чтения/записи данных имеют одинаковую структуру.

С помощью MongoRepository “схема” наших документов должна быть определена в коде приложения, поэтому давайте продолжим и создадим POJO :

import org.springframework.data.annotation.Id;
public class Company {
  @Id
  public String _id;
  private String name;
  private Integer marketCap;
  // and constructor + setters + getters + toString method
}

Некоторые неинтересные строки кода опущены для краткости. Вы можете найти весь Java-код с полностью рабочими примерами на GitHub:

я сам/mongodb-java-crud-ops

CRUD-операции MongoDB с Java. Два способа доступа: MongoRepository (типобезопасный) или MongoCollection (универсальный).

MongoRepository обладает мощной функцией: можно определить расширяемый класс, и Spring Boot автоматически создаст компонент, который реализует репозиторий.

import org.springframework.data.mongodb.repository.MongoRepository;
public interface CompanyRepository
    extends MongoRepository {}

Репозиторий компании позволит получить доступ к коллекции company , и все документы из базы данных будут представлены как Company . Мы готовы разместить наши первые компании:

@Autowired
CompanyRepository repository;
Company amazon = new Company("Amazon", 1600);
Company google = new Company("Google", 1010);
repository.save(amazon);
repository.save(google);
repository.findAll()
    .forEach(System.out::println);
// result:
// Company{_id='5f48ff8bf557ca416e52a6c4', name='Amazon', marketCap=1600}
// Company{_id='5f48ff8bf557ca416e52a6c5', name='Google', marketCap=1010}

Мы взаимодействовали с репозиторием с помощью его интерфейсных методов MongoRepository , которые включают: save , Findall , findById , удалить и т.д.

Кроме того, мы можем определить дополнительные методы запроса в репозитории нашей компании. Давайте добавим метод поиска компании по названию и другой метод, который выполняет поиск по минимальной рыночной капитализации:

public interface CompanyRepository
    extends MongoRepository {
  List findByName(String name);
  List findByMarketCapGreaterThan(Integer marketCap);
}

// and then use the custom queries:
repository.findByName("Amazon");
repository.findByMarketCapGreaterThan(1500);

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

Company aCompany = repository.findByName("Google").get(0);
aCompany.setName("Alphabet");
repository.save(aCompany);

Наконец, вы можете удалить компания следующим образом:

repository.deleteById(aCompany.get_id());

Здесь мы показываем 3-й способ доступа к базе данных в полностью общем и бесстыдная мода. Весь доступ теперь осуществляется через Documents , который может содержать произвольные данные. MongoCollection предлагает низкоуровневый доступ к базе данных, и мы можем динамически просматривать поля внутри документа и действовать соответствующим образом.

Давайте начнем с инициализации нашего MongoCollection :

MongoClient client = MongoClients.create();
MongoDatabase db = client.getDatabase("mydb");
MongoCollection collection = db.getCollection("company");

Сохраняться документ:

Document google = new Document()
    .append("name", "Google")
    .append("marketCap", 1010);
collection.insertOne(google);

Обратите внимание, что интерфейс MongoCollection принимает только Documents , который в основном представляет собой вложенную карту пар ключ-значение. Благодаря динамическому содержимому данного документа мы можем сохранять любые поля, которые захотим.

Для запросов на чтение мы можем использовать эквалайзер (равно):

List google = new ArrayList<>();
collection.find(eq("name", "Google")).into(google);
google.forEach(System.out::println);

Еще много запросов Фильтры поддерживаются как gt , lt , и , или , существует , ne и т.д. В качестве примера давайте поищем компании, которые содержат поле рыночная капитализация но у вас нет названия “Google”:

collection.find(and(exists("marketCap"), ne("name", "Google")))

По сравнению с предыдущим разделом, результаты запроса не печатаются, поэтому нам нужна возможность проверять Документы:

Optional inspectDocument(Document document, String key) {
  return Optional.ofNullable(document.get(key))
      .map(Object::toString);
}

Приведенный выше фрагмент кода показывает, как проверить, существует ли ключ, и если да, сериализует его в строку.

Чтобы завершить этот урок, вот как обновить и удалить документ:

collection.updateOne(eq("name", "Google"), set("name", "Alphabet"));
collection.deleteOne(eq("name", "Alphabet"));

Мы сделали это 😀 🥂 Теперь вы знаете, как выполнять CRUD-операции с MongoDB из Java!

Подводя итог, можно сказать, что MongoDB предлагает мощный язык запросов для работы с документами различной схемы. в экспериментальных целях вы можете использовать оболочку MongoDB. В этом посте мы сосредоточились на Java-клиенте. Обратите внимание, однако, что MongoDB предлагает клиентов практически на всех языках, включая JavaScript (Node.js ), Python и вперед.

Вы можете найти весь Java-код с полностью рабочими примерами на GitHub:

я сам/mongodb-java-crud-ops

CRUD-операции MongoDB с Java. Два способа доступа: MongoRepository (типобезопасный) или MongoCollection (универсальный).

Дайте мне знать о ваших отзывах/вопросах и оставьте лайк ❤ ️

Оригинал: “https://dev.to/pmgysel/mongodb-crud-queries-from-java-and-shell-1gmo”