MongoDB系例全教程

news2025/1/22 19:10:17

一、系列文章目录

一、MongoDB安装教程—官方原版

二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控

三、MongoDB 基于角色的访问控制

四、MongoDB用户管理 

五、MongoDB基础知识详解

六、MongoDB—Indexs 

七、MongoDB事务详解

 八、MongoDB分片教程

九、MongoDB 操作(CRUD) 教程 

十、MongoDB时间序列 

十一、Spring连接到MongoDB的几种方法 

十二、MongoDB可视化工具(免费)

十三、Spring MongoDB 开发教程(一) 

十四、Spring MongoDB 开发教程(二) 

十五、Spring Mongodb—MongoTemplate详解及示例代码 

十六、MongoTemplate —保存、更新和删除文档

十七、Spring Boot 实战 MongoDB 实现批量写入 

        MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常流行的 文档类型数据库 。

      在高负载的情况下,MongoDB 天然支持水平扩展和高可用,可以很方便地添加更多的节点/实例,以保证服务性能和可用性。在许多场景下,MongoDB 可以用于代替传统的关系型数据库或键/值存储方式,皆在为 Web 应用提供可扩展的高可用高性能数据存储解决方案
 

二、SpringBoot整合MongoDB

1、添加MongoDB依赖

Spring Data MongDB 是Spring Data的下的一个模块,在SpringBoot中整合MongoDB就需要添加Spring Data MongDB的依赖


<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2、配置文件


spring:
  data:
    mongodb:
      host: 192.168.136.160
      port:27017
      database:leo
      username:admin
      password:123456

3、实例代码

主要注解:

@Document,文档是 MongoDB 中最基本的数据单元,由键值对组成,类似于 JSON 格式,可以存储不同字段,字段的值可以包括其他文档,数组和文档数组。

@Id(主键):用来将成员变量的值映射为文档的_id的值

@Indexed(索引): 索引是一种特殊的数据结构,存储在一个易于遍历读取的数据集合中,能够对数据库文档中的数据进行排序。索引能极大提高文档查询效率,如果没有设置索引,MongoDB 会遍历集合中的整个文档,选取符合查询条件的文档记录。这种查询效率是非常低的。

@Field(字段): 文档中的字段,类似于 MySql 中的列。

@Aggregation(聚合): 聚合主要用于数据处理,例如统计平均值、求和等。


import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "Book")
public class Book {

    @Id
    private String id;

    private String title;

    private String author;

    private String summary;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getSummary() {
        return summary;
    }

    public void setSummary(String summary) {
        this.summary = summary;
    }
}

SpringBoot操作MongoDB有两种方式,分别是继承MongoRepository类和service注入MongoTemplate

MongoRepository方式:

Repository是用于操作数据库的类


package com.palmer.rachelle.javaspringmongodb.repository;
import com.palmer.rachelle.javaspringmongodb.model.Book;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;

public interface BookRepository extends MongoRepository<Book, String> {
    List<Book> findByTitleStartsWithOrAuthor(String title, String author);
}

Controller代码:

import com.palmer.rachelle.javaspringmongodb.model.Book;
import com.palmer.rachelle.javaspringmongodb.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

@Controller
public class BookController {

    @Autowired
    private BookRepository bookRepository;

    /**
     * Handles listing of all books and searching.
     * @param model
     * @return
     */
    @GetMapping({"/index", "/search"})
    public String showBooks(Model model, String keyword) {
        if (keyword != null) {
            model.addAttribute("books",
                this.bookRepository.findByTitleStartsWithOrAuthor(keyword, keyword));
            model.addAttribute("keyword", keyword);
        } else {
            List<Book> books = this.bookRepository.findAll();
            model.addAttribute("books", books);
        }
        return "index";
    }

    /**
     * Show form for adding a book document
     * @param book
     * @return
     */
    @GetMapping("/add-book")
    public String showAddBookForm(Book book) {
        return "add-book";
    }

    /**
     * This will CREATE a books. C of CRUD.
     * @param book
     * @param result
     * @param model
     * @return
     */
    @PostMapping("/add-book")
    public String addBook(Book book, BindingResult result, Model model) {
        if (result.hasErrors()) {
            return "add-book";
        }
        this.bookRepository.save(book);
        return "redirect:/index";
    }

    /**
     * Show form for editing a book document. The R in CRUD.
     * @param id
     * @param model
     * @return
     */
    @GetMapping("/edit-book/{id}")
    public String showUpdateForm(@PathVariable("id") String id, Model model) {
        Book book = this.bookRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid book Id:" + id));
        model.addAttribute("book", book);

        return "edit-book";
    }

    /**
     * This will update a book document. The U in CRUD
     * @param id
     * @param book
     * @param result
     * @param model
     * @return
     */
    @PostMapping("/edit-book/{id}")
    public String updateBook(@PathVariable("id") String id, Book book, BindingResult result, Model model) {
        if (result.hasErrors()) {
            book.setId(id);
            return "edit-book";
        }

        this.bookRepository.save(book);

        return "redirect:/index";
    }

    /**
     * This will delete a book document. The D in CRUD.
     * @param id
     * @param model
     * @return
     */
    @GetMapping("/delete-book/{id}")
    public String deleteUser(@PathVariable("id") String id, Model model) {
        Book book = this.bookRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid book Id:" + id));
        this.bookRepository.delete(book);

        return "redirect:/index";
    }
}

MongoTemplate实现方式:

MongoTemplate是由org.springframework.data.mongodb.corepacket 提供一个Java类。它提供了一组用于与MongoDB交互的丰富特性,并充当Spring的MongoDB支持的中心类。此外,MongoTemplate是线程安全的,可以跨多个实例调用。MongoTemplate类实现了接口MongoOperations,提供了流畅的API进行Query, Criteria, Update等基本操作,此外,也支持泛型的方法实现。使用起来也非常方便,可直接将MongoTemplate作为类中的属性来使用。

import java.util.List;

/**
 * @author  
 * @version 1.0
 * @date 2022/12/17 15:33
 */
public interface BookService {
    List<Book> findAll();

    NewUser findById(String BookId);

    NewUser save(Book book);

    void deleteById(String BookId);
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import java.util.List;

public class BookServiceImpl implements BookService {

    @Autowired
    private MongoTemplate template;

    @Override
    public List<Book> findAll() {
        return template.findAll(Book.class);
    }

    @Override
    public Book findById(String BookId) {
        return template.findById(BookId,Book.class);
    }

    @Override
    public Book save(Book book) {
        template.save(book);
        return book;
    }

    @Override
    public void deleteById(String BookId) {
        Query query = new Query();
        query.addCriteria(Criteria.where("id").is(BookId));
        template.remove(query, Book.class);
    }
}
@RestController
@RequestMapping("/book")
public class BookController {
    @Autowired
    private final BookService bookService;
  
    @GetMapping("")
    public List<Book> getAllBooks() {
        return bookService.findAll();
    }

    @GetMapping("/{userId}")
    public Book getByBookId(@PathVariable String bookId) {
        return bookService.findById(bookId);
    }

    @PostMapping("/addNewBook")
    @ResponseBody
    public Book addNewBook(@RequestBody Book book) {
        return bookService.save(book);
    }

    @DeleteMapping("/{bookId}")
    public String delete(@PathVariable String bookId) {
        Book book = new Book();
        book.setId(bookId);
        bookService.deleteById(bookId);
        return "deleted: " + bookId;
    }

    @PutMapping("")
    public Book update(@RequestBody Book book) {
        return bookService.save(book);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1165124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker的安装、基础命令与项目部署

文章目录 前言一、docker安装与MySQL部署1.Linux环境下docker的安装&#xff08;1&#xff09;基于CentOS7&#xff08;2&#xff09;基于Ubuntu 二、docker基础1.常见命令&#xff08;1&#xff09;快速创建一个mysql容器&#xff08;MySQL得一键安装&#xff09;。&#xff0…

【ubuntu】搭建lamp架构

一、准备工作 1、更新源 apt-get updateapt #就是一个管理包的工具&#xff0c;理解为centos中的yum update #表示让apt执行更新的操作&#xff0c;更新的内容为软件列表。#为什么要更新软件列表&#xff1f; 就时本地会隔断时间进行同步镜像站的资源包&#xff0c;但是我…

如何滴水不漏的学完C语言?

如何滴水不漏的学完C语言&#xff1f; 学习C语言需要掌握的知识点确实非常广泛。如果你觉得学校教学中所涉及的内容有所欠缺&#xff0c;可以有很多其他方式进行补充学习。最近很多小伙伴找我&#xff0c;说想要一些C语言资料&#xff0c;然后我根据自己从业十年经验&#xff…

GPT引发智能AI时代潮流

最近GPT概念爆火&#xff0c;许多行业开始竞相发展AI &#xff0c;工作就业也将面临跳转&#xff0c;目前测试就业形势就分为了两大类&#xff0c;一类是测试行业如功能、性能、自动化综合性人才就业技能需求&#xff0c;另一类便是AI测试行业的需求普遍增长&#xff0c;原本由…

使用IO完成端口实现简单回显服务器

说明 使用IO完成端口实现简单回显服务器&#xff0c;因为是测试用的&#xff0c;所以代码很粗糙。 提醒 使用的是ReadFile、WriteFile来实现Overlapped IO&#xff0c;正式场合应该用WSARecv、WSASend&#xff0c;原因&#xff1a;来自《Windows网络编程技术》 8.2.5节 在这里…

葡萄酒中的酒精含量是多少?

当你喝完一杯加利福尼亚赤霞珠和你的朋友在一个周五的晚上出游&#xff0c;你不禁会注意到&#xff0c;这只玻璃杯能让你感觉有点不同于你前几个周末喝的意大利灰皮诺葡萄酒。出于好奇&#xff0c;你查看了一下ABV&#xff0c;发现这个数字高达14.5%&#xff01;难怪&#xff0…

requires SDK version >=3.0.1 <4.0.0, version solving failed

这个很明显是FLUTTER SDK不匹配的问题&#xff0c;需要更新flutter SDK&#xff0c;最简单的办法&#xff0c;在flutter官网的页面直接下载最新的&#xff0c;然后替换之前旧版本的flutter 官网&#xff1a; 在 Windows 操作系统上安装和配置 Flutter 开发环境 - Flutter 中文…

C++并发编程实战——07.设计无锁的并发数据结构

文章目录 设计无锁的并发数据结构定义及意义无阻塞数据结构无锁数据结构无等待数据结构无锁结构的利弊 无锁数据结构的例子无锁线程安全栈使用风险指针检测不可回收的节点使用引用计数无锁栈上的内存模型实现一个无锁的线程安全队列 设计无锁数据结构的指导建议 设计无锁的并发…

windwos10搭建我的世界服务器,并通过内网穿透实现联机游戏Minecraft

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

mysql双主搭建

https://www.bilibili.com/video/BV1BK4y1t7MY/?spm_id_from333.880.my_history.page.click&vd_source297c866c71fa77b161812ad631ea2c25 要到用双主&#xff0c;或多主&#xff0c;主要是考虑到这么一个场景&#xff1a; 如果一个应用&#xff0c;全球用户都要用&#x…

API接口安全设计

简介 HTTP接口是互联网各系统之间对接的重要方式之一&#xff0c;使用HTTP接口开发和调用都很方便&#xff0c;也是被大量采用的方式&#xff0c;它可以让不同系统之间实现数据的交换和共享。 由于HTTP接口开放在互联网上&#xff0c;所以我们就需要有一定的安全措施来保证接口…

LuaHttp库写的一个简单的爬虫

LuaHttp库是一个基于Lua语言的HTTP客户端库&#xff0c;可以用于爬取网站数据。与Python的Scrapy框架类似&#xff0c;LuaHttp库也可以实现网站数据的抓取&#xff0c;并且可以将抓取到的数据保存到数据库中。不过需要注意的是&#xff0c;LuaHttp库并不像Scrapy框架那样具有完…

限制LitstBox控件显示指定行数的最新数据(3/3)

实例需求&#xff1a;由于数据行数累加增加&#xff0c;控件加载的数据越来越多&#xff0c;每次用户都需要使用右侧滚动条拖动才能查看最新数据。 因此希望ListBox只加载最后10行数据&#xff08;不含标题行&#xff09;&#xff0c;这样用户可以非常方便地选择数据&#xff…

基于python+django开发的电影链接搜索网站 - 毕业设计 - 课程设计

文章目录 源码下载地址项目介绍界面预览项目备注毕设定制&#xff0c;咨询 源码下载地址 点击这里下载代码 项目介绍 该项目是基于python的web类库django开发的一套web网站&#xff0c;给同学做的课程作业。 本人的研究方向是一项关于搜索的研究项目。在该项目中&#xff0c…

WoShop跨境电商源码:解放你的双手,批量发货轻松搞定

随着跨境电商的快速发展&#xff0c;越来越多的企业开始涉足这一领域。在这个过程中&#xff0c;如何高效地处理批量发货成为了亟待解决的问题。本文将探讨跨境电商源码支持批量发货的优势、需求分析、实现方案、技术实现、测试与维护以及总结与建议。 一、引言 在跨境电商领域…

Linux进程概念(2)

Linux进程概念(2) &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要内容讲解了进程的概念&#xff0c;PCB&am…

Python用RoboBrowser库写一个通用爬虫模版

以下是一个使下载lianjia内容的Python程序&#xff0c;爬虫IP服务器为duoip的8000端口。 from robobrowser import RoboBrowser# 创建一个RoboBrowser对象 browser RoboBrowser(user_agentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) …

人工智能与无人驾驶:未来驾驶体验的革命性变革

人工智能与无人驾驶&#xff1a;未来驾驶体验的革命性变革 人工智能&#xff08;AI&#xff09;和无人驾驶技术的迅速发展正在改变我们的交通方式和出行体验。它们结合了先进的感知技术、智能算法和高性能计算能力&#xff0c;为实现自动驾驶提供了可能性。本文将探讨人工智能和…

悟道云端,探索测试新境

“探寻新技术的前沿&#xff0c;分享测试经验的心得”&#xff0c;这是我参加云栖大会的初衷。回顾第一次参加云栖大会的情景&#xff0c;仿佛还历历在目。那是2017年&#xff0c;我刚刚步入职场&#xff0c;对云计算领域充满了好奇和憧憬。云栖大会给了我一个难得的机会&#…

JS利用时间戳倒计时案例

我们在逛某宝&#xff0c;或者逛某东时&#xff0c;我们时常看到一个倒计时&#xff0c;时间一到就开抢&#xff0c;这个倒计时是如何做的呢&#xff1f;让我为大家介绍一下。 理性分析一下&#xff1a; 1.用将来时间减去现在时间就是剩余的时间 2.核心&#xff1a;使用将来的时…