在Spring-boot中操作MongoDB

news2024/11/29 13:40:21

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。在使用spring-boot操作MongoDB数据库前,先了解一些MongoDB的基本概念和增删改查操作。下面是MongDB中某些概念与关系性数据库中概念类别。

在安装MongoDB数据库后,在terminal中输入mongodb命令,即可进入命令行模式,对mongDB进行增删改查操作,如下图所示,切换到myDB数据库,并对col collection进行查询操作。

这里整理了几个常用的增删改查脚本,可以在命令行中逐一输入验证,另外,除了操作数据外,还可以创建各种管理权限的用户。

db.mycol2.insert({"name" : "Demo教程"}) //自动创建集合

db.createCollection("mycol", { capped : true, max : 10000 } ) //创建集合并插入数据

db.COLLECTION_NAME.insert(document)或db.COLLECTION_NAME.save(document)

//插入Document

db.col.insert({title: 'MongoDB教程', description: 'Nosql',tags: ['mongodb', 'database', 'NoSQL']})

db.col.update({'title':'MongoDB教程'},{$set:{'title':'MongoDBNew'}}) //updateDocument

db.col.find().pretty() //查询Document

db.createUser({user: "Guru99",pwd: "password",roles:[{role: "userAdminAnyDatabase" , db:"admin"}]}) //在admin数据库中创建管理员用户Guru99,用户角色是userAdminAnyDatabase,该角色允许用户对MongoDB中的所有数据库具有管理特权

db.createUser({user: "Employeeadmin",pwd: "password",roles:[{role: "userAdmin" , db:"Employee"}]}) //在Employee数据库中创建普通用户Employeeadmin,角色是userAdmin,该角色允许用户仅对db选项中指定的数据库具有管理特权

db.createUser({user: "Mohan",pwd: "password",roles:[{role: "read" , db:"Marketing"},role: "readWrite" , db:"Sales"}}]})

//创建用户Mohan,对Marketing数据库具备只读权限,对Sales数据库具备读写权限

上面的查询只是简单查询,如果要进行更加复杂的条件,应该如何编写了呢?下面总结了常用的查询条件

除了查询操作,还可以对Collection进行聚合操作,例如groupby等,具体如下所示:

聚合操作和管道相集合,例如$project控制显示的结果的数据结构字段,具体如下所示:

聚合操作除了上面的使用场景外,还可以通过$lookup支持多表关联查询,语法规则如下所示

{
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}

例如,创建order表和inventory表,执行联合查询脚本,如下所示:

db.orders.aggregate([{
     $lookup:{from:"inventory",
         localField:"item",
         foreignField:"sku",as:"inventory_docs"}}])

查询结果如下图所示:从结果可以看到,上面的多表查询和关系性数据库中的left join相似。

上面介绍的都是MongoDB的基础知识,接下来看看如果要在Spring-boot框架中操作MongoDB数据,应该如何进行。在初始化项目时首先需要引入"spring-boot-starter-data-mongodb"依赖,接着定义Model对象和Repository,代码片段如下图所示:

和Spring Data JPA操作关系型数据库一样,Repository继承MongoRepository后,提供了数据写入查询等方法,所以CoffeRepository interface中无需写任何代码即可完成对mongodb的数据写入的查询操作。除了集成MongoRepository的方式,还可以使用MongoTemplate操作数据库数据,如下图所示:利用MongeTemplate提供的方法可以CRUD collection/document/view等。下图是部分利用MongoTempalte进行查询操作的代码片段,更多信息可查看demo。

在实际项目中如果是简单查询可以直接使用Repository中提供的方法,如果是更灵活的查询可借助MongoTemplate完成。总结而言,如果要在spring-boot中操作MongoDB数据库中的数据,比较简单。

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

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

相关文章

项目介绍 + 定长内存池设计及实现

你好&#xff0c;我是安然无虞。 文章目录项目介绍当前项目做的是什么?技术栈内存池是什么?池化技术内存池内存池主要解决的问题malloc定长内存池学习目的定长内存池设计项目介绍 当前项目做的是什么? 这个项目是实现一个高并发的内存池, 它的原型是 Google 的一个开源项…

C++——哈希3|位图

目录 常见哈希函数 位图 位图扩展题 位图的应用 常见哈希函数 1. 直接定址法--(常用) 这种方法不存在哈希冲突 取关键字的某个线性函数为散列地址&#xff1a;Hash&#xff08;Key&#xff09; A*Key B 优点&#xff1a;简单、均匀 缺点&#xff1a;需要事先知道关键字的…

C语言学习笔记(八): 自定义数据类型

结构体变量 什么是结构体 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构&#xff0c;它称为结构体 结构体的成员可以是任何类型的变量&#xff0c;如整数&#xff0c;字符串&#xff0c;浮点数&#xff0c;其他结构体&#xff0c;指针等 struct Student //s…

streamlit自定义组件教程和组件开发环境配置

About create your own component&#xff1a; you can follow this tutorial streamlit tutorial 重要&#xff01;以下步骤都是在教程的基础上更改的。这个教程做的很棒。 Component development environment configuration&#xff1a; 根据文章 https://streamlit-com…

【iOS】APP IM聊天框架的设计(基于第三方SDK)

【iOS】APP IM聊天框架的设计&#xff08;基于第三方SDK&#xff09; 前言 在开发社交聊天类型的APP的时候&#xff0c;IM是必不可少的功能&#xff0c;而且很多公司的IM服务都是接的第三方的&#xff0c;很少用自研的&#xff0c;国内的IM厂商也都很成熟&#xff0c;本文所有…

基于文心大模型套件ERNIEKit实现文本匹配算法,模块化方便应用落地

文心大模型,产业级知识增强大模型介绍 官网:https://wenxin.baidu.com/ 文心大模型开发套件ERNIEKit,面向NLP工程师,提供全流程大模型开发与部署工具集,端到端、全方位发挥大模型效能。 提供业界效果领先的ERNIE 3.0系列开源模型和基于ERNIE的前沿任务模型,满足企业和开…

暴力破解(new)

数据来源 本文仅用于信息安全的学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 01 暴力破解介绍及应用场景 》暴力破解介绍 》暴力破解字典 GitHub - k8gege/Passwor…

QT(56)-动态链接库-windows-导出变量-导出类

1.导出变量 1.1不使用_declspec(dllimport) _declspec(dllexport) 使用_declspec(dllimport) _declspec(dllexport) 1.2win32 mydllwin32 myexe 1.3win32 mydllqt myexe 2.导出类 使用_declspec(dllimport) _declspec(dllexport) 2.1不用关键…

导出Excel表格(调用后端接口方式)

在开发中我们会遇到导出Excel表格的需求&#xff0c;但是导出分为前端生成和后端生成。前端生成的方式CSDN其他小伙伴已经做出了很多教程&#xff0c;是依赖xlsx插件。但是&#xff0c;今天我讲的是&#xff0c;调用后端接口的方式生成Excel表格。1.调用后端提供的导出接口&…

Doris--简单使用

一、数据表的创建与数据导入 1.1、创建表 1.1.1、单分区 CREATE TABLE table1 (siteid INT DEFAULT 10,citycode SMALLINT,username VARCHAR(32) DEFAULT ,pv BIGINT SUM DEFAULT 0 -- 聚合模型&#xff0c; value column 使用sum聚合 ) AGGREGATE KEY(siteid, citycode, …

【Java】二叉树

一、树形结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; 有一个特殊…

IDEA安装ChatGPT插件

ChatGPT&#xff0c;美国OpenAI [1] 研发的聊天机器人程序 [12] &#xff0c;于2022年11月30日发布 [2-3] 。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人…

mybatis条件构造器(一)

mybatis条件构造器(一) 1 准备工作 1.1 建表sql语句(Emp表) SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0; -- ---------------------------- -- Table structure for emp -- ---------------------------- DROP TABLE IF EXISTS emp; CREATE TABLE emp (EMPNO int NOT N…

tws耳机哪个牌子音质好?tws耳机音质排行榜

随着蓝牙耳机市场的不断发展&#xff0c;使用蓝牙耳机的人也逐渐增多&#xff0c;近年来更是超越有线耳机成为最火爆的数码产品之一。那么&#xff0c;tws耳机哪个牌子音质好&#xff1f;下面&#xff0c;我来给大家推荐几款音质好的tws耳机&#xff0c;可以当个参考。 一、南…

vb 模块和作用域的关系

模块在VB中有三种类型的模块&#xff0c;分别是窗体模块、标准模块和类模块。窗体模块窗体模块中包含了窗体以及窗体中所有控件的事件过程&#xff0c;文件扩展名为&#xff08;*.frm)&#xff0c;窗体文件中不仅包含窗体对象的外观设计&#xff0c;也包含窗体模块&#xff08;…

基于matlab评估星载合成孔径雷达性能

一、前言本示例展示了如何评估星载合成孔径雷达 &#xff08;SAR&#xff09; 的性能&#xff0c;并将理论极限与 SAR 系统的可实现要求进行比较。SAR利用雷达天线在目标区域上的运动来提供更精细的方位角分辨率。给定雷达的主要参数&#xff08;例如工作频率、天线尺寸和带宽&…

Nginx配置Https协议(告别Http协议,使用Https)图

注&#xff1a; 相关代码&#xff1a;Linux部署Nginx&#xff08;快速&#xff09;_Dyansts的博客-CSDN博客 视频教程 &#xff1a;6分钟告别http协议&#xff0c;使用更加安全的https协议_哔哩哔哩_bilibili 细节 免费申请ssl网站&#xff1a;FreeSSL首页 - FreeSSL.cn一…

OpenShift 4 - 将 VMware 虚机迁移至 OpenShift Virtualization(视频)- 冷迁移

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证 文章目录环境说明OpenShift Virtualization 环境VMware vSphere 环境了解 Migration Toolkit for Virtualization安装 Migration Toolkit for Virtualizati…

教你使用内嵌chatGPT的新必应(bing)

巨头们的AI战愈演愈烈起来。在谷歌公布其 ChatGPT 竞品Bard后的第二天&#xff0c;微软就官宣了两款新的 AI 产品&#xff1a;基于下一代 OpenAI 大型语言模型上的新版 Bing 搜索引擎&#xff0c;号称“比 ChatGPT 更强大”&#xff0c;以及基于 AI 功能的改进版 Edge 网络浏览…

在 Flutter 中使用 webview_flutter 4.0 | js 交互

大家好&#xff0c;我是 17。 已经有很多关于 Flutter WebView 的文章了&#xff0c;为什么还要写一篇。两个原因&#xff1a; Flutter WebView 是 Flutter 开发的必备技能现有的文章都是关于老版本的&#xff0c;新版本 4.x 有了重要变化&#xff0c;基于 3.x 的代码很多要重…