广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Spring Boot中快速操作Mongodb数据库指南
  • 747
分享到

Spring Boot中快速操作Mongodb数据库指南

2024-04-02 19:04:59 747人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

前言 在Spring Boot中集成mongoDB非常简单,只需要加入MonGodb的Starter包即可,代码如下: <dependency> <group

前言

Spring Boot中集成mongoDB非常简单,只需要加入MonGodb的Starter包即可,代码如下:


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

然后配置Mongodb的连接信息:


spring.data.mongodb.uri=mongodb://192.168.0.13/test

完整配置信息请参考下面:


spring.data.mongodb.authentication-database= # Authentication database name.
spring.data.mongodb.database= # Database name.
spring.data.mongodb.field-naming-strategy= # Fully qualified name of the FieldNamingStrategy to use.
spring.data.mongodb.grid-fs-database= # GridFS database name.
spring.data.mongodb.host= # Mongo server host. Cannot be set with URI.
spring.data.mongodb.passWord= # Login password of the mongo server. Cannot be set with URI.
spring.data.mongodb.port= # Mongo server port. Cannot be set with URI.
spring.data.mongodb.repositories.type=auto # Type of Mongo repositories to enable.
spring.data.mongodb.uri=mongodb://localhost/test # Mongo database URI. Cannot be set with host, port and credentials.
spring.data.mongodb.username= # Login user of the mongo server. Cannot be set with URI.

配置好了之后就直接可以注入MongoTemplate操作数据了

添加数据

首先创建一个实体类,我们这边用文章来做实体类,定义如下字段:


import java.util.Date;
import java.util.List;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

@Document(collection = "article_info")
public class Article {
    @Id
    private String id;
    @Field("title")
    private String title;
    @Field("url")
    private String url;
    @Field("author")
    private String author;
    @Field("tags")
    private List<String> tags;
    @Field("visit_count")
    private Long visitCount;
    @Field("add_time")
    private Date addTime;
    
    //省略get set方法
}

实体类中的注解解释如下:

1.Document注解标识这是一个文档,等同Mysql中的表,collection值表示mongodb中集合的名称,不写默认为实体类名article。

2.Id注解为主键标识

3.Field注解为字段标识,指定值为字段名称,这边有个小技巧,之所有spring-data.mongodb中有这样的注解,是为了能够让用户自定义字段名称,可以和实体类不一致,还有个好处就是可以用缩写,比如username我们可以配置成unane或者un,这样的好处是节省了存储空间,mongodb的存储方式是key value形式的,每个key就会重复存储,key其实就占了很大一份存储空间。
接下来可以操作数据库了,接着上次,在测试类里写代码


@Autowired
private MongoTemplate mongoTemplate;


public static void initArticle() {
    //循环添加
    for (int i = 0; i < 10; i++) {
        Article article = new Article();
        article.setTitle("MongoTemplate的基本使用");
	    article.setAuthor("yinjihuan");
	    article.setUrl("Http://cxytiandi.com/blog/detail/" + i);
	    article.setTags(Arrays.asList("java", "mongodb", "spring"));
	    article.setVisitCount(0L);
	    article.setAddTime(new Date());
	    mongoTemplate.save(article);
    }
    
    //批量添加
    List<Article> articles = new ArrayList<>(10);
    for (int i = 0; i < 10; i++) {
	    Article article = new Article();
	    article.setTitle("MongoTemplate的基本使用");
	    article.setAuthor("yinjihuan");
	    article.setUrl("http://cxytiandi.com/blog/detail/" + i);
	    article.setTags(Arrays.asList("java", "mongodb", "spring"));
	    article.setVisitCount(0L);
	    article.setAddTime(new Date());
	    articles.add(article);
    }
    mongoTemplate.insert(articles, Article.class);
  
}

在数据量大的情况下批量添加性能会更好哦。

删除操作


//删除author为yinjihuan的数据
Query query = Query.query(Criteria.where("author").is("yinjihuan"));
mongoTemplate.remove(query, Article.class);

//如果实体类中没配集合名词,可在删除的时候单独指定article_info
query = Query.query(Criteria.where("author").is("yinjihuan"));
mongoTemplate.remove(query, "article_info");

//删除集合,可传实体类,也可以传名称
mongoTemplate.dropCollection(Article.class);
mongoTemplate.dropCollection("article_info");

//删除数据库
mongoTemplate.getDb().dropDatabase();

下面这2种适合要知道删除的数据有哪些的场景,比如记录删除的记录


//查询出符合条件的第一个结果,并将符合条件的数据删除,只会删除第一条
query = Query.query(Criteria.where("author").is("yinjihuan"));
Article article = mongoTemplate.findAndRemove(query, Article.class);

//查询出符合条件的所有结果,并将符合条件的所有数据删除
query = Query.query(Criteria.where("author").is("yinjihuan"));
List<Article> articles = mongoTemplate.findAllAndRemove(query, Article.class);

修改操作

首先初始化需要修改的数据


{
    "_id": ObjectId("57c43caed4c63D7e39b5dc48"),
    "title": "MongoTemplate的基本使用",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 0,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate的基本使用",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 0,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}

//修改第一条author为yinjihuan的数据中的title和visitCount
Query query = Query.query(Criteria.where("author").is("yinjihuan"));
Update update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.updateFirst(query, update, Article.class);

修改后结果如下,我们会发现第一条数据的title还有visit_count被修改了


{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate的基本使用",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 0,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}

//修改全部符合条件的
query = Query.query(Criteria.where("author").is("yinjihuan"));
update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.updateMulti(query, update, Article.class);

修改后结果如下,我们会发现所有数据的title还有visit_count被修改了


{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}

//特殊更新,更新author为jason的数据,如果没有author为jason的数据则以此条件创建一条新的数据
//当没有符合条件的文档,就以这个条件和更新文档为基础创建一个新的文档,如果找到匹配的文档就正常的更新。
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.upsert(query, update, Article.class);

修改后结果如下,我们会发现新增了一条数据


{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}
{
    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
    "author": "jason",
    "title": "MongoTemplate",
    "visit_count": 10
}

//更新条件不变,更新字段改成了一个我们集合中不存在的,用set方法如果更新的key不存在则创建一个新的key
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").set("money", 100);
mongoTemplate.updateMulti(query, update, Article.class);

修改后结果如下,我们会发现新加了一个key


{
    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
    "author": "jason",
    "title": "MongoTemplate",
    "visit_count": 10,
    "money":100
}

//update的inc方法用于做累加操作,将money在之前的基础上加上100
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").inc("money", 100);
mongoTemplate.updateMulti(query, update, Article.class);

修改后结果如下,我们会发现money变成200


{
    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
    "author": "jason",
    "title": "MongoTemplate",
    "visit_count": 10,
    "money":200
}

//update的rename方法用于修改key的名称
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").rename("visitCount", "vc");
mongoTemplate.updateMulti(query, update, Article.class);

{
    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
    "author": "jason",
    "title": "MongoTemplate",
    "vc": 10,
    "money":200
}

//update的unset方法用于删除key
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").unset("vc");
mongoTemplate.updateMulti(query, update, Article.class);

修改后结果如下,我们会发现vc这个key被删除了


{
    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
    "author": "jason",
    "title": "MongoTemplate",
    "money":200
}

//update的pull方法用于删除tags数组中的java
query = Query.query(Criteria.where("author").is("yinjihuan"));
update = Update.update("title", "MongoTemplate").pull("tags", "java");
mongoTemplate.updateMulti(query, update, Article.class);

修改后结果如下,我们会发现tags里的java被删除了


{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}

查询操作

查询,无论是关系型数据库还是mongodb这种NoSQL,都是使用比较多的,大部分操作都是读的操作。

mongodb的查询方式很多种,下面只列了一些常用的,比如:

1.=查询

2.模糊查询

3.大于小于范围查询

4.in查询

5.or查询

6.查询一条,查询全部

7.自己慢慢学习...

根据作者查询所有符合条件的数据,返回List


Query query = Query.query(Criteria.where("author").is("yinjihuan"));
List<Article> articles = mongoTemplate.find(query, Article.class);

只查询符合条件的第一条数据,返回Article对象


query = Query.query(Criteria.where("author").is("yinjihuan"));
Article article = mongoTemplate.findOne(query, Article.class);

查询集合中所有数据,不加条件


articles = mongoTemplate.findAll(Article.class);

查询符合条件的数量


query = Query.query(Criteria.where("author").is("yinjihuan"));
long count = mongoTemplate.count(query, Article.class);

根据主键ID查询


article = mongoTemplate.findById(new ObjectId("57c6e1601e4735b2c306cdb7"), Article.class);

in查询


List<String> authors = Arrays.asList("yinjihuan", "jason");
query = Query.query(Criteria.where("author").in(authors));
articles = mongoTemplate.find(query, Article.class);

ne(!=)查询


query = Query.query(Criteria.where("author").ne("yinjihuan"));
articles = mongoTemplate.find(query, Article.class);

lt(<)查询访问量小于10的文章


query = Query.query(Criteria.where("visitCount").lt(10));
articles = mongoTemplate.find(query, Article.class);

范围查询,大于5小于10


query = Query.query(Criteria.where("visitCount").gt(5).lt(10));
articles = mongoTemplate.find(query, Article.class);

模糊查询,author中包含a的数据


query = Query.query(Criteria.where("author").regex("a"));
articles = mongoTemplate.find(query, Article.class);

数组查询,查询tags里数量为3的数据


query = Query.query(Criteria.where("tags").size(3));
articles = mongoTemplate.find(query, Article.class);

or查询,查询author=jason的或者visitCount=0的数据


query = Query.query(Criteria.where("").orOperator(
    Criteria.where("author").is("jason"),
    Criteria.where("visitCount").is(0)));
articles = mongoTemplate.find(query, Article.class);

总结

到此这篇关于Spring Boot中如何快速操作Mongodb的文章就介绍到这了,更多相关SpringBoot操作Mongodb内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Spring Boot中快速操作Mongodb数据库指南

本文链接: https://www.lsjlt.com/news/125385.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring Boot中快速操作Mongodb数据库指南
    前言 在Spring Boot中集成Mongodb非常简单,只需要加入Mongodb的Starter包即可,代码如下: <dependency> <group...
    99+
    2022-11-12
  • mongoDB数据库索引快速入门指南
    目录MongoDB 索引1. 开始与准备数据2. 创建索引前3. 创建索引 createIndex4. 创建索引后6.唯一索引与符合索引①唯一索引②复合索引MongoDB 索引 索引...
    99+
    2022-11-13
  • golang连接MongoDB数据库及数据库操作指南
    目录安装配置MongoDB驱动导入驱动获得数据库连接数据库操作添加文档查找文档更新文档删除文档总结安装配置MongoDB驱动 安装驱动 go get -u github.com/mongodb/mongo-go-driv...
    99+
    2022-09-07
  • 利用Python操作MongoDB数据库的详细指南
    目录前言1 连接数据库1.1 安装PyMongo1.2 连接数据库1.3 连接库与集合2 MongoDB命令在python中的对应方法3 插入数据到MongoDB基本语法被插入的数据格式说明举例4 从MongoDB中查询...
    99+
    2022-06-24
    python操作mongodb数据库 python读取数据库数据 python 操作mongodb
  • 怎么在Spring Boot中使用MongoDB数据库
    这篇文章给大家介绍怎么在Spring Boot中使用MongoDB数据库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MongoDB简介MongoDB是一个基于分布式文件存储的数据库,...
    99+
    2022-10-18
  • mysql数据库恢复操作指南
    下文给大家带来有关mysql数据库恢复操作指南内容,相信大家一定看过类似的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完mysql数据库恢复操作指南你一定会有所收获。1、系统说明:数据库版...
    99+
    2022-10-18
  • Spring Boot中使用jdbctemplate 操作MYSQL数据库实例
    最近在学习使用Spring Boot连接数据库,今天学习了使用jdbctemplate 操作MYSQL数据库,下面就留个笔记不废话,先来代码pom文件:<project xmlns="http://maven.apache.org/P...
    99+
    2023-05-31
    spring boot 数据库
  • MongoDB数据库如何在spring boot项目中使用
    MongoDB数据库如何在spring boot项目中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。依赖<dependency> <groupId&g...
    99+
    2023-05-31
    springboot mongodb
  • 在Qt中操作MySQL数据库的实战指南
    目录一、安装驱动(1)安装(2)验证驱动是否安装成功 二、使用mysql数据库(1)单语句执行(2)多语句执行(3)批处理操作 三、总结一、安装驱动 (1)安装 在Qt中操作MySQL数据库首先要安装...
    99+
    2023-04-03
    qt操作mysql qt操作数据库 qt 数据库操作
  • MySQL快速回顾:数据库和表操作
    前提要述:参考书籍《MySQL必知必会》 利用空闲时间快速回顾一些数据库基础。 4.1 连接 在最初安装MySQL,可能会要求你输入一个管理登录(通常为root)和一个口令(密码)。 连接MySQL需要以下信息: 主机名(计...
    99+
    2021-02-09
    MySQL快速回顾:数据库和表操作
  • Android中操作SQLite数据库快速入门教程
    SQLite是Android平台软件开发中会经常用到的数据库产品,作为一款轻型数据库,SQLite的设计目标就是是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非...
    99+
    2022-06-06
    sqlite数据库 SQLite 教程 Android
  • Apache 中的 PHP 数据类型教程:快速入门指南
    PHP 是一种流行的服务器端编程语言,它广泛应用于 Web 应用程序的开发和维护。在 PHP 中,数据类型是非常重要的,因为它们决定了我们如何使用和处理数据。在本文中,我们将介绍 PHP 中的各种数据类型,并提供一些示例代码帮助您更好地理...
    99+
    2023-10-06
    数据类型 教程 apache
  • Spring Boot实战之数据库操作的示例代码
    上篇文章中已经通过一个简单的HelloWorld程序讲解了Spring boot的基本原理和使用。本文主要讲解如何通过spring boot来访问数据库,本文会演示三种方式来访问数据库,第一种是JdbcTemplate,第二种是JPA,第三...
    99+
    2023-05-30
  • 利用python中pymysql操作MySQL数据库的新手指南
    目录一. pymysql介绍 二. 连接数据库的完整流程 1. 引入pymysql模块 2. 创建连接对象 3. 使用连接对象创建游标对象 4. 准备需要使用的sql语句 5. 使用...
    99+
    2022-11-12
  • python数据库操作指南之PyMysql使用详解
    目录Pymysql使用详解安装使用连接数据库操作数据库总结PyMysql使用详解 在编写小脚本时,PyMysql是快速连接并操作数据库的一个不错选择。 安装 pip3 install PyMysql # 可使用 pip ...
    99+
    2023-03-02
    pymysql使用教程 pymysql用法 pymysql怎么用
  • 阿里云使用客户数据库操作指南
    本指南将详细介绍如何在阿里云上使用客户数据库。阿里云提供了丰富的数据库服务,包括MySQL、PostgreSQL、MongoDB等多种数据库,您可以根据实际需求选择合适的数据库。本文将介绍如何创建数据库、添加表格、插入数据、查询数据以及备份...
    99+
    2023-11-20
    阿里 操作指南 客户
  • 阿里云数据库更换账户操作指南
    本文主要介绍如何在阿里云数据库中更换账户的操作步骤,以确保数据库的安全性和稳定性。 在阿里云数据库中更换账户是一项重要的操作,因为这可以确保账户的安全性和稳定性。以下是更换账户的操作步骤:步骤一:登录阿里云账号首先,你需要登录你的阿里云账号...
    99+
    2023-12-12
    阿里 操作指南 账户
  • nodejs环境怎么快速操作mysql数据库
    这篇文章给大家分享的是有关nodejs环境怎么快速操作mysql数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。安装依赖npm install dmhsq-mysql-db使用示例快速操作...
    99+
    2023-06-14
  • PHP中如何操作MongoDB 数据库
    这期内容当中小编将会给大家带来有关PHP中如何操作MongoDB 数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1,连接MongoDB数据库$conn =...
    99+
    2022-10-18
  • Java中怎么操作MongoDB数据库
    今天就跟大家聊聊有关Java中怎么操作MongoDB数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java与mongodb的连接1. 连单台m...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作