SpringBoot интегрирует MongoDB (систематическое отображение от установки до использования)

SpringBoot интегрирует MongoDB (систематическое отображение от установки до использования)

Вставьте сюда описание изображения

Введение в MongoDB

Основное введение

MongoDB — это документо-ориентированная нереляционная система управления базами данных (СУБД NoSQL) с открытым исходным кодом, известная своей гибкостью, масштабируемостью и мощными возможностями запросов. MongoDB разработан для удовлетворения потребностей в больших объемах данных, высокой доступности и сложных моделях данных в современных приложениях. Ниже приведены некоторые важные функции и концепции MongoDB:

  1. База данных документов: MongoDB использует документы для представления данных. Документы похожи на структуру данных в формате JSON и могут содержать различные типы данных, такие как строки, числа, даты, массивы и вложенные документы.
  2. Ориентация на документы: MongoDB — это база данных, ориентированная на документы, и каждый документ имеет уникальный идентификатор (часто называемый _id), который однозначно идентифицирует документ.
  3. Высокая масштабируемость: MongoDB поддерживает горизонтальное расширение и может распределять данные на несколько серверов посредством сегментирования для достижения более высокой емкости хранилища и производительности.
  4. Динамическая схема: MongoDB не требует строгого определения структуры таблицы, и документы могут свободно добавлять и изменять поля для адаптации к изменениям в схеме данных.
  5. Мощный язык запросов: MongoDB поддерживает богатый язык запросов и может выполнять сложные операции запросов, включая фильтрацию, сортировку, проекцию, агрегацию и т. д.
  6. Поддержка индексов: MongoDB поддерживает различные типы индексов, включая индексы одного поля, составные индексы, текстовые индексы, геопространственные индексы и т. д., чтобы ускорить операции запросов.
  7. Репликация и высокая доступность. MongoDB поддерживает репликацию данных и автоматический переход на другой ресурс для обеспечения высокой доступности и избыточности данных.
  8. Хранение данных: MongoDB хранит данные в коллекциях, каждая коллекция содержит набор документов. Коллекции аналогичны таблицам в реляционных базах данных.
  9. Платформа агрегации: MongoDB предоставляет мощную структуру агрегации, которая позволяет разработчикам выполнять сложные операции агрегации и преобразования данных.

Следует отметить, что изучение и использование MongoDB может потребовать некоторого времени и опыта, особенно когда речь идет об оптимизации высокой доступности, безопасности и производительности. Рекомендуется обратиться к официальной документации MongoDB и соответствующим руководствам для получения более подробных рекомендаций и информации.

сцены, которые будут использоваться

При этом, когда вы используете базу данных MongoDB, вам необходимо уточнить, для чего вы хотите ее использовать и какого эффекта хотите добиться.Здесь мы также приведем пример:

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

  1. Хранение и анализ больших данных: MongoDB подходит для хранения больших объемов неструктурированных или полуструктурированных данных, таких как данные журналов, данные социальных сетей, данные датчиков и т. д. Гибкая схема и горизонтальная масштабируемость делают его мощным инструментом для хранения и анализа больших данных.

  2. Анализ в реальном времени. Структура агрегации MongoDB и мощные возможности запросов делают ее хорошим выбором для анализа данных в реальном времени. Вы можете быстро агрегировать, фильтровать и преобразовывать данные для удовлетворения потребностей анализа в реальном времени.

  3. Система управления контентом (CMS): MongoDB можно использовать для создания систем управления контентом, особенно для платформ, которым необходимо обрабатывать различные типы контента, мультимедийных ресурсов и совместного редактирования.

  4. Приложения Интернета вещей (IoT): MongoDB может легко обрабатывать данные в реальном времени от нескольких датчиков и устройств, обеспечивая хранение данных и запросы приложений IoT.

  5. Мобильные приложения: MongoDB подходит для мобильных приложений, поскольку поддерживает гибкие модели и структуры данных, которые могут меняться в зависимости от потребностей приложения.

  6. Хранение данных в реальном времени: MongoDB может хранить данные, генерируемые приложениями реального времени, такими как анализ в реальном времени, обмен мгновенными сообщениями и мониторинг в реальном времени.

  7. Социальные сети: MongoDB может эффективно обрабатывать пользовательские данные, публикации, комментарии, отношения и т. д. для платформ социальных сетей.

  8. Отслеживание журналов и событий: MongoDB может хранить данные журналов и событий, а также поддерживать запросы и анализ для мониторинга и устранения неполадок.

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

    Чтобы быть более простым, мы можем использовать примеры вокруг нас.

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

    • Данные пользователя Таобао
      • Место хранения: база данных
      • Особенности: постоянное хранение, очень низкая частота модификаций.
    • Данные игрового оборудования, данные игрового реквизита
      • Место хранения: база данных Mongodb.
      • Особенности: Совмещение постоянного и временного хранения, высокая частота модификаций.
    • Данные прямых трансляций, данные о вознаграждениях, данные фанатов
      • Место хранения: база данных Mongodb.
      • Особенности: Комбинация постоянного и временного хранения, чрезвычайно частые модификации.
    • Данные Интернета вещей
      • Место хранения: Монгодб
      • Особенности: временное хранение, быстрая частота модификации.

    Причина, по которой я познакомился с хранилищем данных MongoDB, заключалась в том, что я хотел хранить записи чата в базе данных, а также сделать их доступными для запроса и извлечения, поэтому я попытался использовать эту базу данных! Поначалу моя концепция этой базы данных все еще напоминала MySQL, но позже я обнаружил, что она совершенно другая, поэтому, пожалуйста, не сопоставляйте свойства базы данных MySQL с базой данных MongoDB! ! !

Установка MongoDB

Установка в виде установочного пакета

Если вы используете пакет tar для установки MongoDB в CentOS и вам необходимо добавить его в системную переменную среды PATH, вы можете установить, настроить и установить переменную среды, выполнив следующие шаги:

  1. Загрузите и разархивируйте MongoDB.
    Сначала загрузите сжатый пакет для вашей операционной системы и архитектуры с официального сайта MongoDB. Для загрузки можно использовать wgetкоманду:

    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.4.0.tgz
    

    Вы также можете перейти непосредственно на официальный сайт, чтобы загрузить, а затем загрузить

    изображение-20230821210055108

    Затем разархивируйте скачанный сжатый пакет:

    tar -zxvf mongodb-linux-x86_64-4.4.0.tgz
    
  2. Переместите папку MongoDB.
    Переместите разархивированную папку MongoDB в подходящее место, например в /optкаталог:

    sudo mv mongodb-linux-x86_64-4.4.0 /opt/mongodb
    
  3. Создайте каталоги данных и журналов:
    Создайте каталоги для хранения данных и журналов MongoDB:

    sudo mkdir -p /data/db
    sudo mkdir -p /var/log/mongodb
    
  4. Настройте переменные среды:
    откройте /etc/profileфайл, чтобы изменить конфигурацию переменных среды системного уровня:

    sudo vi /etc/profile
    

    Добавьте путь к исполняемому файлу MongoDB в переменную среды PATH, добавив следующую строку в конец файла:

    export PATH=/opt/mongodb/bin:$PATH
    

    Сохраните и выйдите из редактора.

  5. Проверьте переменные среды:
    проверьте изменения переменных среды, чтобы они были доступны в новых сеансах терминала:

    source /etc/profile
    
  6. Запустите службу MongoDB:
    запустите сервер MongoDB и укажите каталог данных и путь к журналу:

    mongod --dbpath /data/db --logpath /var/log/mongodb/mongod.log --fork
    

    Необязательно: вы также можете настроить автоматический запуск MongoDB при запуске системы:

    sudo systemctl enable mongod
    
  7. Проверьте установку MongoDB:
    запустите MongoDB Shell, чтобы убедиться, что установка прошла успешно:

    mongo
    

Установка Docker-формы

Чтобы установить MongoDB в Docker, вы можете выполнить следующие действия:

  1. Сначала убедитесь, что у вас установлен Docker. Если он не установлен, вы можете скачать и установить Docker с официального сайта Docker:

    https://www.docker.com/get-started

    изображение-20230821203948326

  2. Откройте терминал (или интерфейс командной строки).

  3. Используйте следующую команду, чтобы получить официальный образ MongoDB в Docker:

docker pull mongo

изображение-20230821204525928

  1. Создайте и запустите контейнер MongoDB. Следующая команда создаст контейнер MongoDB с именем «my-mongodb» и привяжет его к порту хоста 27017. При необходимости вы можете изменить имя контейнера и привязку порта:
docker run --name my-mongodb -p 27017:27017 -d mongo
  1. Контейнер MongoDB уже работает в фоновом режиме. Посмотреть запущенные контейнеры можно с помощью следующей команды:
docker ps

изображение-20230821204942397

  1. Чтобы подключиться к оболочке Mongo контейнера MongoDB, вы можете использовать следующую команду:
docker exec -it my-mongodb mongo

Вы попадете в оболочку Mongo, где сможете выполнять команды MongoDB.

  1. Чтобы остановить и удалить контейнер MongoDB, вы можете использовать следующие команды:
docker stop my-mongodb
docker rm my-mongodb

Это остановит и удалит контейнер с именем «my-mongodb».

Удаленное подключение MongoDB

Пожалуйста, будьте осторожны и не занимайте порт 27017, иначе установка может завершиться неудачей. В то же время обратите внимание на состояние брандмауэра при удаленном подключении: либо выключите брандмауэр, либо разрешите порт 27017.

В операционной системе CentOS, чтобы разрешить порт 27017 (порт по умолчанию для MongoDB), необходимо настроить правило брандмауэра, позволяющее подключениям из внешней сети достигать этого порта. Вот шаги по освобождению порта 27017 в CentOS:

  1. Проверьте состояние брандмауэра :

    Сначала проверьте состояние брандмауэра, чтобы убедиться, что он активен. Вы можете проверить статус брандмауэра с помощью следующей команды:

    sudo firewall-cmd --state
    
  2. Добавьте правила брандмауэра :

    Если брандмауэр активен, вы можете добавить правило брандмауэра, разрешающее порт 27017, с помощью следующей команды:

    sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
    

    объяснять:

    • --zone=public: укажите зону брандмауэра для добавления правила.
    • --add-port=27017/tcp: добавить правила TCP для порта 27017.
    • --permanent: сохраните правило навсегда, чтобы оно вступило в силу после перезапуска.
  3. Перезагрузите правила брандмауэра :

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

    sudo firewall-cmd --reload
    
  4. Правила проверки :

    Посмотреть добавленные правила брандмауэра можно с помощью следующей команды:

    sudo firewall-cmd --list-all
    

    Убедитесь, что в выводе вы видите include ports: 27017/tcp, указывающий, что порт 27017 разрешен.

Теперь вы успешно освободили порт 27017 в CentOS, разрешив внешние сетевые подключения к MongoDB. Далее мы можем использовать Navicat для проверки соединения!

изображение-20230821205328295

Основной синтаксис MongoDB

Создать базу данных

изображение-20230821211104284

Создать таблицу данных

В MongoDB данные хранятся в коллекциях (Collections) вместо традиционных таблиц данных. Каждая коллекция может содержать несколько документов (Documents), которые аналогичны строкам в базе данных. Вот пример, показывающий, как использовать синтаксис MongoDB для создания коллекции под названием «Книги» и вставки документа:

// 连接到 MongoDB 数据库
use my_db

// 创建 "Books" 集合并插入一个文档
db.Books.insertOne({
    
    
  title: "如何使用MongoDB",
  author: "IT小辉同学",
  year: 2023
})

изображение-20230821211514158

Позвольте мне объяснить каждую часть приведенного выше синтаксиса:

  1. use my_db: это переключится на базу данных «my_db». Если база данных не существует, MongoDB автоматически создаст ее.

  2. db.Books.insertOne({ ... }): документ будет вставлен в коллекцию «Книги» текущей базы данных. Вы передаете данные, которые хотите вставить, в insertOneметод как объект JSON.

В приведенном выше примере мы создаем коллекцию под названием «Книги» и вставляем в нее документ, содержащий три поля: «название», «автор» и «год».

Вставить данные

Одиночная вставка

// 插入一条数据到 "Books" 集合
db.Books.insertOne({
    
    
  title: "如何使用MongoDB",
  author: "IT小辉同学",
  year: 2023
})

Несколько вставок

// 插入十条数据到 "Books" 集合
db.Books.insertMany([
  {
    
     title: "平凡的世界", author: "路遥", year: 1986 },
  {
    
     title: "呐喊", author: "鲁迅", year: 1923 },
  {
    
     title: "朝花夕拾", author: "鲁迅", year: 1928 },
  {
    
     title: "李自成", author: "王安忆", year: 2010 },
  {
    
     title: "寻找安详", author: "郭文斌", year: 2000 },
  {
    
     title: "推拿", author: "毕飞宇", year: 1999 },
  {
    
     title: "苏东坡传", author: "林语堂", year: 2015 },
  {
    
     title: "长安的荔枝", author: "马伯庸", year: 2021 },
  {
    
     title: "林清玄散文集", author: "林清玄", year: 1988 },
	 {
    
     title: "橘颂", author: "张炜", year: 2022 }
])

изображение-20230821213731860

Найти данные

В MongoDB вы можете использовать findэтот метод для поиска данных. findМетод возвращает коллекцию документов, удовлетворяющих определенным критериям запроса, которые можно фильтровать, сортировать и проецировать по мере необходимости. Вот несколько распространенных примеров использования:

Основной запрос:

Вот базовый пример запроса, показывающий, как найти все документы в коллекции «Книги»:

// 连接到 MongoDB 数据库
use mydatabase

// 查询 "Books" 集合中的所有文档
db.Books.find()

Условный запрос:

Вы можете фильтровать результаты, передавая критерии запроса. В следующем примере показано, как найти книги, написанные «Лу Синем»:

// 查询作者是 "鲁迅" 的书
db.Books.find({
    
     author: "鲁迅" })

Запрос проекции:

Операция проецирования позволяет указать возвращаемые поля. В следующем примере показано, как вернуть только поля названия книги и автора:

// 查询并投影出书名和作者字段
db.Books.find({
    
    }, {
    
     title: 1, author: 1, _id: 0 })

Сортировка запроса:

sortРезультаты можно отсортировать с помощью метода. В следующем примере показано, как сортировать результаты запроса по годам в порядке возрастания:

// 查询并按年份升序排序
db.Books.find().sort({
    
     year: 1 })

Ограничьте количество результатов запроса:

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

// 查询并限制结果数量为三
db.Books.find().limit(3)

Обратите внимание, что findметод возвращает курсор (Cursor), и вы можете получить результаты запроса, перебирая курсор. Вы можете использовать .toArray()этот метод для преобразования курсора в массив или использовать forEachцикл для обработки результатов один за другим.

обновить данные

В MongoDB вы можете использовать метод updateOneили updateManyдля обновления документа.

Одно обновление:

Вот как обновить год публикации книги до 2023, используя updateOneметод :{ title: "橘颂", author: "张炜", year: 2022 }

// 连接到 MongoDB 数据库
use mydatabase

// 更新指定文档的出版年份
db.Books.updateOne(
  {
    
     title: "橘颂", author: "张炜", year: 2022 },
  {
    
     $set: {
    
     year: 2023 } }
)

В приведенном выше примере мы используем updateOneэтот метод для обновления документов, соответствующих определенным условиям. Первый параметр — это условие запроса, определяющее обновляемый документ. Второй параметр использует $setоператор для указания обновляемого поля и его нового значения.

Несколько обновлений :

Если вы хотите обновить несколько документов, вы можете использовать updateManyэтот метод. Например:

// 连接到 MongoDB 数据库
use mydatabase

// 更新满足条件的所有文档的出版年份
db.Books.updateMany(
  {
    
     title: "橘颂", author: "张炜", year: 2022 },
  {
    
     $set: {
    
     year: 2023 } }
)

Это обновит год публикации до 2023 для всех документов, соответствующих критериям.

Следует отметить, что операция обновления по умолчанию обновляет только первый соответствующий документ. Если вы хотите обновить все соответствующие документы, используйте updateManyэтот метод.

удалить данные

В MongoDB вы можете использовать методы deleteOneи deleteManyдля удаления документов. Эти методы позволяют удалять документы, соответствующие определенным критериям, для удовлетворения ваших потребностей в управлении данными.

Удаление одного элемента:

Используйте deleteOneметод для удаления первого документа, отвечающего определенным условиям. Вот пример, показывающий, как deleteOneудалить книгу с помощью метода:

// 连接到 MongoDB 数据库
use mydatabase

// 删除满足条件的第一条文档
db.Books.deleteOne(
  {
    
     title: "橘颂", author: "张炜", year: 2023 }
)

В приведенном выше примере мы используем deleteOneметод для удаления первого документа, соответствующего указанным критериям.

Удалить несколько элементов:

Используйте deleteManyэтот метод для удаления всех документов, соответствующих определенным критериям. Вот пример, показывающий, как deleteManyудалить несколько книг с помощью этого метода:

// 连接到 MongoDB 数据库
use mydatabase

// 删除满足条件的所有文档
db.Books.deleteMany(
  {
    
     year: "2021" }
)

В приведенном выше примере мы используем deleteManyметод для удаления всех книг, год которых равен «2021».

изображение

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

SpringBoot интегрирует MongoDB

Первый метод интеграции: наследовать MongoRepository.

Интеграция MongoDB в Spring Boot — относительно простой процесс. Spring Boot предоставляет подпроект Spring Data MongoDB, который значительно упрощает интеграцию с MongoDB. Ниже приведены основные шаги по интеграции MongoDB в Spring Boot:

  1. Добавьте зависимости:
    добавьте следующие зависимости в файл проекта Spring Boot pom.xml, чтобы представить Spring Data MongoDB:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    
  2. Настроить подключение к базе данных. Настройте информацию о подключении MongoDB, такую ​​как имя базы данных, хост, порт и т. д., в файле конфигурации
    или :application.propertiesapplication.yml

    spring.data.mongodb.uri=mongodb://192.168.18.181:27017/my_db
    

    конфигурация YML

    spring:
      data:
        mongodb:
          uri: mongodb://192.168.18.181:27017/my_db
    
  3. Создать класс сущности:
    создайте класс POJO (простой Java-объект), который представляет документ, который будет храниться в MongoDB. Вы можете использовать аннотации Spring Data для определения сопоставлений документов и полей. Например:

    import lombok.Data;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.mongodb.core.mapping.Document;
    
    @Document(collection = "books")
    @Data
    public class Book {
          
          
        @Id
        private String id;
        private String title;
        private String author;
        private int year;
    }
    
    
  4. Создать интерфейс репозитория:
    создайте org.springframework.data.mongodb.repository.MongoRepositoryсобственный интерфейс репозитория, который наследуется от интерфейса. Например:

    import com.xiaohui.pojo.Book;
    import org.springframework.data.mongodb.repository.MongoRepository;
    import java.util.List;
    
    public interface BookRepository extends MongoRepository<Book, String> {
          
          
        // 可以定义自定义查询方法
        List<Book> findByAuthor(String author);
    }
    
    
  5. Использование репозитория.
    В свой класс обслуживания или контроллер добавьте свой собственный репозиторий и используйте его для выполнения операций MongoDB. Например:

    import com.xiaohui.mapper.BookRepository;
    import com.xiaohui.pojo.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import java.util.List;
    
    @Service
    public class BookService {
          
          
        private final BookRepository bookRepository;
    
        @Autowired
        public BookService(BookRepository bookRepository) {
          
          
            this.bookRepository = bookRepository;
        }
        public List<Book> findByAuthor(String author) {
          
          
            return bookRepository.findByAuthor(author);
        }
        
    }
    

6. Создайте интерфейс доступа к уровню управления:

import com.xiaohui.pojo.Book;
import com.xiaohui.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;

@RestController
@RequestMapping("/api")
public class BookController {
    
    

    @Autowired
    private BookService bookService;

    @GetMapping("/list")
    public HashMap<String,Object> getBookList() {
    
    
        String author = "张炜";
        HashMap<String,Object> books=new HashMap<>();
        List<Book> bookList=bookService.findBooksByAuthor(author);
        books.put("books",bookList);
        return books;
    }
}

изображение-20230821225522851

Второй метод интеграции: Annotate MongoTemplate

Если вы хотите выполнять операции MongoDB в Spring Boot MongoTemplateвместо использования MongoRepository, вы можете выполнить следующие шаги:

  1. Внедрение MongoTemplate:
    в ваш класс обслуживания (или где-либо еще, где вам нужно выполнять операции MongoDB) внедрите MongoTemplate:

    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.stereotype.Service;
    
    @Service
    public class BookService {
          
          
        private final MongoTemplate mongoTemplate;
    
        public BookService(MongoTemplate mongoTemplate) {
          
          
            this.mongoTemplate = mongoTemplate;
        }
    
    }
    
  2. Выполнение операций MongoDB.
    Используйте внедренный MongoTemplateэкземпляр для выполнения операций MongoDB. Ниже приведен MongoTemplateпример выполнения запроса с использованием:

    import org.springframework.data.mongodb.core.query.Criteria;
    import org.springframework.data.mongodb.core.query.Query;
    
    
    public List<Book> findByAuthor(String author) {
          
          
        Query query = new Query(Criteria.where("author").is(author));
        return mongoTemplate.find(query, Book.class);
    }
    

    В приведенном выше примере мы используем Criteriaдля построения условий запроса, а затем используем mongoTemplate.findметод для выполнения запроса. Вы можете использовать различные Queryметоды для выполнения таких операций, как запрос, обновление, удаление и т. д. в соответствии с вашими потребностями.

    изображение-20230821225337999

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

Анализ различий

MongoTemplateи MongoRepositoryоба являются способами взаимодействия с MongoDB в Spring Boot, но у них есть некоторые различия. Ниже приведены основные различия между этими двумя методами.

  1. Уровень абстракции и автоматизации:

    • MongoRepositoryПредоставляет набор абстракций высокого уровня, которые позволяют выполнять общие операции с базой данных, такие как сохранение, запрос, обновление и удаление, путем определения методов интерфейса. Spring Data MongoDB автоматически реализует эти методы без написания специального кода запроса.
    • MongoTemplateПредоставляется метод операции более низкого уровня, и вам необходимо вручную создавать и выполнять операции запроса, обновления и удаления. Это обеспечивает большую гибкость и настройку, но также требует написания большего количества кода.
  2. Автоматизированные запросы и условные запросы:

    • MongoRepositoryПозволяет автоматически генерировать запросы с помощью соглашений об именах методов. Например, используя его в имени метода findByAuthor, вы можете автоматически построить запрос на поиск документов для указанного автора.

      изображение-20230821225655644

    • MongoTemplateДля построения запросов с использованием Queryи необходимо вручную писать условия запроса и другие операции.Criteria

  3. Применимая сцена:

    • MongoRepositoryОн подходит для сценариев, в которых необходимо выполнять стандартизированные и общие операции запроса, особенно для простых операций CRUD.
    • MongoTemplateПодходит для сценариев, требующих более сложных настраиваемых запросов и операций, а также для сценариев, требующих более детального контроля над операциями базы данных.
  4. Сложность и кривая обучения:

    • MongoRepositoryУровень абстракции выше, что облегчает разработчикам начало работы и использование, особенно для основных операций с базами данных.
    • MongoTemplateОбеспечивает большую гибкость, но требует большего изучения и понимания синтаксиса и операций запросов MongoDB.

В целом, MongoRepositoryон предоставляет быстрые и простые в использовании методы выполнения общих операций с базой данных, подходящие для большинства ситуаций. MongoTemplateОн подходит для тех ситуаций, когда требуются более сложные операции, пользовательские запросы и более сложные операции с базой данных. Выбирая, какой метод использовать, вы должны основывать свое решение на потребностях вашего проекта и опыте вашей команды разработчиков.

Сложный метод работы первый:

Запрос с несколькими условиями:

Предположим, у вас есть Bookкласс сущности и вы хотите выполнить запрос на основе нескольких критериев, например найти книги, год которых превышает определенное значение и автором которых является определенный человек:

public interface BookRepository extends MongoRepository<Book, String> {
    
    
    List<Book> findByYearGreaterThanAndAuthor(int year, String author);
}

Операция агрегирования:

Операции агрегирования позволяют группировать, подсчитывать, суммировать и выполнять другие данные. Вот пример, демонстрирующий, как использовать операции агрегации Spring Data MongoDB:

import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;

Aggregation aggregation = Aggregation.newAggregation(
    Aggregation.group("author").count().as("count"),
    Aggregation.sort(Sort.Direction.DESC, "count")
);

AggregationResults<AuthorBookCount> results = mongoTemplate.aggregate(
    aggregation, "books", AuthorBookCount.class
);
List<AuthorBookCount> authorBookCounts = results.getMappedResults();

В приведенном выше примере мы используем операцию агрегирования для подсчета количества книг на каждого автора и сортируем их в порядке убывания количества.

Сортировка и пейджинг:

Вы можете использовать Sortобъекты для указания условий сортировки и Pageableобъекты для реализации разбиения по страницам.

Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by("year").descending());
Page<Book> books = bookRepository.findAll(pageable);

Удаление операции:

Чтобы выполнить операцию удаления, вы можете использовать метод удаления Spring Data MongoDB для удаления в зависимости от условий.

void deleteByYearAndAuthor(int year, String author);

Вышеупомянутое в сочетании с нашими текущими существующими данными показывает, как использовать для MongoRepositoryвыполнения операций запроса с несколькими условиями, агрегации, сортировки, разбиения на страницы и удаления. В зависимости от ситуации вы можете использовать соглашения об именах методов Spring Data MongoDB, построение запросов и операции агрегирования для реализации более сложных операций. Если более сложные операции невозможно выполнить с помощью соглашения об именовании методов, вы также можете использовать @Queryаннотации для написания пользовательских операторов запроса.

Сложный метод работы второй:

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

  1. Запрос с несколькими условиями.
    Предположим, вы хотите запросить данные на основе различных условий, например, запросить книги, год которых превышает определенное значение и автором которых является определенный автор. Здесь мы используем Criteriaдля построения нескольких условий:

    Query query = new Query();
    query.addCriteria(Criteria.where("year").gt(2000).and("author").is("鲁迅"));
    List<Book> books = mongoTemplate.find(query, Book.class);
    
  2. Операции агрегирования.
    Предположим, вы хотите выполнить операцию агрегирования данных, например подсчитать количество книг каждого автора. Здесь мы используем конвейер агрегации:

    Aggregation aggregation = Aggregation.newAggregation(
        Aggregation.group("author").count().as("bookCount")
    );
    AggregationResults<AuthorBookCount> result = mongoTemplate.aggregate(aggregation, "books", AuthorBookCount.class);
    List<AuthorBookCount> authorBookCounts = result.getMappedResults();
    

    AuthorBookCountЭто простой класс DTO, используемый для хранения совокупных результатов.

  3. Операция сортировки.
    Предположим, вы хотите отсортировать запрос по году. Вы можете Queryдобавить опцию сортировки в:

    Query query = new Query();
    query.with(Sort.by(Sort.Direction.ASC, "year"));
    List<Book> books = mongoTemplate.find(query, Book.class);
    
  4. Операция удаления:
    Предположим, вы хотите удалить документы, соответствующие определенным условиям, вы можете использовать removeметод:

    Query query = new Query();
    query.addCriteria(Criteria.where("year").lt(2000));
    mongoTemplate.remove(query, Book.class);
    

MongoTemplateТакже предоставляются более продвинутые функции, такие как обновление, подкачка страниц, пакетные операции и т. д. Я не буду здесь приводить примеры по одному, но выводы вы можете сделать и понять сами! ! !

Давно я не обновлял статью, но еще и потому, что моя работа в последнее время немного усложнилась, поэтому у меня нет ни времени, ни интереса изучать что-то новое! Сегодня дела идут лучше. Я также начал принимать новые вещи и делиться своим опытом обучения со всеми. Я надеюсь, что каждый может получить пользу. С этого момента все статьи больше не будут привязаны к фанатам. Раньше это было также для того, чтобы позволить больше друзья видят.Теперь можно читать медленно, но это не обязательно! Я надеюсь, что вы все получите удовольствие от учебы, получите что-то от учебы и добьетесь успеха! ! !

Supongo que te gusta

Origin blog.csdn.net/weixin_53742691/article/details/132418525
Recomendado
Clasificación