使用mongodb实现简单的读写操作

本文适合初学者,特别是刚刚安装了mongodb数据库的朋友,或在atlas刚拿到免费集群的朋友。

拿到数据库,心情很激动,手痒难耐。特别想向数据库插入几条数据库试试。即使是深夜完成了安装,也忍不住想去完成这些操作。看到数据库里的记录,心中会更有成就感。

这是一个里程碑的时刻,代表着mongodb学习的开始。或者其他任何一种数据库技能学习的开始。

本文基于官方文档,整理出mongodb简单的增删改查操作。

创建操作

创建操作,是向集合中添加一个新的文档。mongodb的一条记录称为一个文档。文档是类似JSON结构的BSON结构的键值对对象,支持字符串,数值,布尔类型,时间,数组,对象等类型。多条文档构成了mongodb的一个集合。

当插入文档的集合不存在时,mongodb自动创建这个集合。

Mongodb提供了两种文档插入方法

db.collection.insertOne()
db.collection.insertMany()//举例
db.users.insertOne({name:"sue",age: 26,gentle: "Female"
})db.users.insertMany([{name:"sue",age: 26,gentle: "Female"
},{name:"james",age: 28,gentle: "Male"
}])

其中集合名称是users, 文档是带有三个字段name, age, gentle的对象。

使用insertOne方法,插入一条文档,参数是一个对象。而使用insertMany方法,插入多条文档,参数是一个数组。

Mongodb对单个文档的操作是原子性的,即对于单个文档的操作,只有成功和失败两个结果。成功, 则数据保存到数据库。失败,则没有数据保存到数据库。不会出现保存了一半这样的中间状态。insertOne向数据库中插入一条文档记录,是原子操作。insertMany向数据库插入多条文档,不是原子操作。

查询操作

查询操作,是从数据库的某个集合中读取文档。

mongodb提供find()方法,实现从集合中读取文档数据。

db.collection.find()

在find()方法中,可以带有参数,作为查询参数,限定查询返回值。如对前面插入的user集合进行查询

//查询所有数据
db.users.find()
//查询name为sue的数据
db.users.find({name: "sue"
})
//限制返回数量
db.users.find().limit(5)

修改操作

修改操作更新数据库制定集合中符合查询条件的文档数据。mongodb提供了几种方法来支持数据的更新

//更新一条数据
db.collection.updateOne()
//更新多条数据
db.collection.updateMany()
//替换一条数据
db.collection.replaceOne()

用户在修改操作的第一个参数指定查询过滤条件,在第二个参数中指定修改字段和目标值。如修改集合users中name为james的age字段

db.users.updateOne({name: "james"},{$set: {"age": 30}})

其中过滤条件{name: "james"}用来筛选集合中符合name是james的文档。使用$set设置更新的字段和字段值。

Mongodb对单个文档的修改是原子性的,因此updateOne(), replaceOne()方法,都是原子操作。updateMany()方法操作单条记录,也是原子性的,操作多条记录时,是非原子操作。

删除操作

删除操作,是删除集合中的文档。mongodb提供了两种方法来删除文档。

//删除一条文档
db.collection.deleteOne()
//删除多条文档
db.collection.deleteMany()

删除方法的参数中指定查询过滤条件,使用该条件查询出来的结果会被删除。如删除users表中男性数据。

db.users.deleteMany({gentle: 'Male'})

删除users表中name是james的数据

db.users.deleteOne({name: 'James'})

Mongodb中对单个文档的操作是原子的。所以deleteOne是原子操作, deleteMany不是原子操作。

一点建议

数据库操作中,修改操作和删除操作,都是比较危险的操作。数据一旦修改保存到数据库,很难恢复到修改前的样子。对于单条数据,恢复起来容易。对于批量数据的修改更新,请使用查询语句反复确认修改删除范围后,再执行操作。并准备好数据恢复脚本。

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

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

相关文章

动能资讯 | 智能音箱—万物物联新纽带

音箱市场在过去几年经历了显着的增长,这主要得益于数字音乐的普及和技术创新的推动。随着语音助手技术的发展,智能音箱如Amazon Echo、Google Home、Apple HomePod等逐渐成为市场中的热点。这些音箱不仅提供音频播放功能,还整合了语音识别和智…

ACM32F070 RTC 引脚做普通 GPIO 用法配置

有场景需要把带RTC引脚功能的IO当做普通的GPIO使用,但是按照正常的GPIO初始化却无法使用,该芯片手册中有给出介绍 现给出配置方法,参考官方SDK里面PC13的配置: // PC13 GPIOC_Handle.Pin GPIO_PIN_13; GPIOC_Handle.Mod…

pngPackerGUI_V2.0是什么软件?png图片打包plist工具

png图片打包plist工具,手把手教你使用pngPackerGUI_V2.0 此软件是在pngpacker_V1.1软件基础之后,开发的界面化操作软件,方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件,得到如下目录,双击打开 pngPackerGUI.…

Python基础学习

基础语法 字面量 什么是字面量: 在代码中,被写下来的固定的值,称为字面量 | 类型 | 描述 | 说明 | | — | — | — | | 数组(Number) | 整数 int | 整数 | | | 浮点型 float | 浮点数 | | | 复数 complex | 复数 如 …

拼多多赚钱更难,利润率持续下滑

国内的电商圈又一次见证历史。 11月29日,拼多多盘中涨超4%,市值到达1924亿美元,首次超过阿里巴巴,成为美股市值最大中概股。 前一日,拼多多(NASDAQ:PDD)公布了2023年三季报,尽管营收和净利润双增&#xf…

面试题库之JAVA基础篇(三)

final 被final修饰的类不可以被继承。被final修改的方法不可以被重写。被final修改的方法,jvm会尝试内联,以提高运行效率。被final修改的变量不可变,如果修改的是引用,那么引用不可变,引用指向的对象内容可变。被fin…

前缀和例题:子矩阵的和AcWing796

//前缀和模板提,在读入数据的时候就可以先算好前缀和的大小 //计算前缀的时候用:g[i][j] g[i][j-1] g[i-1][j] - g[i-1][j-1] Integer.parseInt(init[j-1]); //计算结果的时候用:g[x2][y2] - g[x1 - 1][y2]- g[x2][y1-1] g[x1 -1][y1 - 1] "\n" //一些重复加的地…

固态硬盘与机械硬盘的区别

盘、磁道、扇区、柱面,这些都是机械硬盘的概念,固态硬盘没有这些东西,固态硬盘和机械硬盘虽然都叫硬盘,但是在原理层面有着本质上的区别。 速印机(理想、荣大等)、复印机(夏普、东芝、理光、佳能…

Go 语言中的函数调用。

更好的观看体验,请点击——函数调用 | YinKais Blog 本文将从函数的调用惯例和参数传递方法两个方面分别介绍函数执行的过程。 1、调用惯例 对于不同的编程语言, 它们在调用函数的时候往往都使用相同的语法: somefunction(arg0, arg1) 虽…

Intellij idea 快速定位到文件的开头或者结尾的几种方式

方式一:Scroll To Top / Scroll To Bottom 首先打开Keymap设置,并搜索Scroll To 依次点击File->Settings->Keymap可打开该界面 对于Scroll To Top 快速滑动定位到文件顶部, Scroll To Bottom快速定位到文件底部 默认是没有设置快捷键的…

C++ Easyx 让圆球跟随鼠标移动

目录 下载Easyx 检验 绘制窗口 画圆 响应事件的处理 清除原先绘图 渲染缓冲区 逻辑 代码托管 下载Easyx 在Easyx官网下载大暑版: 检验 写如下代码: 编译运行,如果控制台出现2023字样,代表配置成功: 绘制窗口 进入Eaxy官方网站,点…

科研试剂实验室Tubulysin M微管蛋白抑制剂936691-46-2

Tubulysin M 微管蛋白抑制剂 M 936691-46-2 英文名称:Tubulysin M 中文名称:微管蛋白抑制剂 M 化学名称:(2S,4R)-4-[[2-[(1R,3R)-1-乙酰氧基-4-甲基-3-[甲基-[(2S,3S)-3-甲基-2-[[(2R) -1-甲基哌啶-2-羰基]氨基]戊酰基]氨基]戊基]-1,3-噻唑…

数据结构树,二叉树,堆

目录 ​编辑 1.树概念及结构 2. 树的表示 3.二叉树概念及结构 特殊的二叉树 二叉树的性质 ​编辑 二叉树选择题 二叉树的存储结构 4.堆的概念及结构 父亲孩子下标关系​编辑 堆的实现接口 堆结构体设计堆的初始化堆的销毁 堆的插入(附:向上调整算法) 堆…

spring日志输出到elasticsearch

1.maven <!--日志elasticsearch--><dependency><groupId>com.agido</groupId><artifactId>logback-elasticsearch-appender</artifactId><version>3.0.8</version></dependency><dependency><groupId>net.l…

Android编译FreeType2

cmake_minimum_required(VERSION 3.4.1) project(freetype2-static)# 添加定义 add_definitions(-DANDROID_NDK -DFT2_BUILD_LIBRARY1)# 指定头文件的搜索路径 #include_directories(${CMAKE_SOURCE_DIR}/include_all) #include_directories(${CMAKE_SOURCE_DIR}/../../include…

22、为什么是卷积?

(本文已加入“计算机视觉入门与调优”专栏,点击专栏查看更多文章信息) 我们先看一看神经网络(或者叫一个AI模型),是如何完成一张图片的推理的。 你肯定听说过阿尔法狗大战柯洁的故事,当时新闻一出,不知大家什么反应,反正我是被震撼到了。机器竟然学到了那么多的棋谱,…

维度建模与数据仓库设计:理论与实践案例

文章目录 定义案例&#xff1a;零售销售数据仓库实践创建维度表创建事实表插入维度表数据插入事实表数据增改查 定义 维度建模是一种用于数据仓库设计的技术&#xff0c;它的目标是使数据库结构更加直观&#xff0c;易于理解和使用&#xff0c;特别是对于那些进行数据查询和报…

鸿蒙(HarmonyOS)应用开发——容器组件(Tabs组件)

前言 前面一篇文章中&#xff0c;已经说了Gridt组件。那么接下来就是容器组件中的Tabs组件 #mermaid-svg-sBnRJ30uI3RLwr3y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-sBnRJ30uI3RLwr3y .error-icon{fill:#552…

【OpenCV】计算机视觉图像处理基础知识

目录 前言 推荐 1、OpenCV礼帽操作和黑帽操作 2、Sobel算子理论基础及实际操作 3、Scharr算子简介及相关操作 4、Sobel算子和Scharr算子的比较 5、laplacian算子简介及相关操作 6、Canny边缘检测的原理 6.1 去噪 6.2 梯度运算 6.3 非极大值抑制 6.4 滞后阈值 7、Ca…