В этом руководстве вы увидите рабочие примеры для выполнения операций 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"); MongoCollectioncollection = db.getCollection("company");
Сохраняться документ:
Document google = new Document() .append("name", "Google") .append("marketCap", 1010); collection.insertOne(google);
Обратите внимание, что интерфейс MongoCollection принимает только Documents
, который в основном представляет собой вложенную карту пар ключ-значение. Благодаря динамическому содержимому данного документа мы можем сохранять любые поля, которые захотим.
Для запросов на чтение мы можем использовать эквалайзер
(равно):
Listgoogle = 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")))
По сравнению с предыдущим разделом, результаты запроса не печатаются, поэтому нам нужна возможность проверять Документы:
OptionalinspectDocument(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”