系列六、MongoDB文档相关操作

news2024/11/25 16:35:25

一、插入文档

1.1、单条插入

# 语法
db.集合名称.insert({json数据})

# 案例
db.user.insert({
	"name":"张三",
	"age":23,
	"birthday":"1997-07-07"
})

 1.2、多条插入

# insertMany语法:
db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)
参数说明:
    document:要写入的文档。
    writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
    ordered:指定是否按顺序写入,默认 true,按顺序写入。
# 案例:

db.user.insertMany(
	[
		{
			"name":"唐僧",
			"age":123
		},
		{
			"id":1,
			"name":"孙悟空",
			"age":500
		},
	]
)

===============================================
# 使用insert也可以实现多条插入

db.user.insert(
	[
		{
			"name":"抓八戒",
			"age":160
		},
		{
			"id":2,
			"name":"沙悟净",
			"age":250
		},
	]
)

 1.3、脚本方式

# 语法
for (let i = 0; i < num; i++) {
	db.集合名称.insert({"_id":i+10,"name":"李白","age":20+i});
}
# 案例
for (let i = 0; i < 10; i++) {
	db.user.insert({"_id":i+10,"name":"李白","age":20+i});
}

 二、查询

2.1、语法

db.集合名称.find(query, projection)
参数说明:
    query: 可选,使用查询操作符指定查询条件
    projection: 可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)

如果需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
db.集合名称.find().pretty()

MongoDB vs RDBMS where语句比较

2.2、查询所有

# 语法:
db.集合名称.find()

# 案例:查询user表中所有的记录
db.user.find()
db.user.find().pretty()

 2.3、等值查询

# 等值查询语法
db.集合名称.find({key:value})

# 案例:查询user集合中,年龄为24的所有文档
db.user.find({age:24}).pretty()

2.4、非等值查询

2.4.1、小于查询

# 语法
db.集合名称.find({key:{$lt:value}}).pretty()
# 案例:查询user集合中,年龄小于25岁的所有文档
db.user.find({age:{$lt:25}}).pretty()

2.4.2、小于等于查询

# 小于等于
db.集合名称.find({key:{$lte:value}}).pretty()
# 案例:查询user集合中,年龄小于等于25岁的所有文档
db.user.find({age:{$lte:25}}).pretty()

 

2.4.3、大于查询

# 大于
db.集合名称.find({key:{$gt:value}}).pretty()
# 案例:查询user集合中,年龄大于25岁的所有文档
db.user.find({age:{$gt:25}}).pretty()

2.4.4、大于等于查询

# 大于等于
db.集合名称.find({key:{$gte:value}}).pretty()
# 案例:查询user集合中,年龄大于等于25岁的所有文档
db.user.find({age:{$gte:25}}).pretty()

2.4.5、不等于查询

# 不等于
db.集合名称.find({key:{$ne:value}}).pretty()
# 案例:查询user集合中,年龄不等于25岁的所有文档
db.user.find({age:{$ne:25}}).pretty()

 2.5、and查询

# 语法
db.集合名称.find({key1:value1,key2:value2,...}).pretty()
类似于MySQL中的 where key1 = value1 and key2 = value2
# 案例:查询user集合中id为10,并且姓名为李白的文档
db.user.find({_id:10,name:"李白"}).pretty()

# 案例:查询user集合中name为李白,并且id大于5的所有文档

db.user.find({name:"李白",_id:{$gt:5}}).pretty()

# 案例
查询user集合中name为李白,并且name为李太白的所用文档

db.user.find({name:'李白',name:'李太白'}).pretty()

注意事项:and查询时,同一个字段如果出现了多次,那么后边的将会把前边的条件覆盖掉

 2.6、or查询

# 语法
db.集合名称.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()
# 案例:查询id为1或者name为李太白的所有文档信息
db.user.find({$or:[{_id:1},{name:'李太白'}]}).pretty()

# 案例二:查询user集合中id为1,或者年龄大于24的所有文档集合
db.user.find({$or:[{_id:1},{age:{$gt:24}}]}).pretty()

 2.7、and和or联合查询

# 语法
db.集合名称.find({key1:value1,$or:[{key2:value2},{key3:value3}]}).pretty()

类似于MySQL中的 where age > 50 and (name = '李白' or name = '杜甫')
# 案例:查询user集合中age大于24,并且name为李太白或者name为杜甫的所有文档列表
db.user.find({age:{$gt:24},$or:[{name:'李太白'},{name:'杜甫'}]}).pretty()

 2.8、数组查询

# 语法
db.集合名称.find({数组名:value}).pretty()
# 案例:查询user集合中,兴趣爱好为"读书"的文档记录
db.user.find({likes:'读书'}).pretty()

# 案例:查询user集合中,喜好为6的文档列表
db.user.find({likes:{$size:6}}).pretty()

db.user.find({likes:{$size:2}}).pretty()

 

 2.9、模糊查询

# 语法:
db.集合名称.find({key:/value/}).pretty()

# 注意事项
在MongoDB中使用正则表达式,可以实现近似于模糊查询的功能
# 案例一、查询user集合中name字段中包含 白 的所有文档信息
db.user.find({name:/白/}).pretty()

 2.10、排序查询

# 语法
db.集合名称.find().sort({key1:1,key2:-1,...}).pretty()

说明:
1:升序,类似于MySQL中的asc
-1:降序,类似于MySQL中的desc
# 案例:查询user集合中的所有文档,按照id降序排序
db.user.find().sort({_id:-1}).pretty()

2.11、分页查询

# 语法
db.集合名称.find().skip(跳过的记录数).limit(size)
类似于SQL语句:limit start,rows


# 案例1:查询user集合中的前2条记录
db.user.find().skip(0).limit(2)

# 案例2:查询user集合中的第3、4条记录
db.user.find().skip(2).limit(2)

 2.12、总条数查询

# 语法
db.集合名称.count();
db.集合名称.find({key:value}).count();
类似于SQL语句:select count(id) from ...
# 初始化SQL脚本
for (let i = 1; i <= 100000; i++) {
	db.orders.insert({
		_id: i,
		name: 'order_' + i
	});
}


# 案例一:查询orders集合中共有多少条记录
db.orders.count()

# 案例二:查询orders集合中,name为order_100的文档共有多少个
db.orders.find({name:'order_100'}).count()

# 案例三:查询orders集合中,id大于5000的文档共有多少个
db.orders.find({_id:{$gt:5000}}).count()

 2.13、去重查询

# 语法
db.集合名称.distinct('字段')

# 案例
user集合中按照age去重查询

 2.14、返回指定字段

# 语法
db.集合名称.find({条件},{name:1,age:1})
参数2: 1返回、0不返回  注意:1和0不能同时使用
# 案例一:查询所有
db.user.find({},{})

# 案例二:返回name字段,注意默认情况下,_id是唯一标识,会自动返回
db.user.find({},{name:1})

# 案例三:_id不要返回,其他字段都返回
db.user.find({},{_id:0})

 

# 案例四:_id和age不要返回,其他字段都返回
db.user.find({},{_id:0,age:0})

# 案例五、_id不返回,name返回
db.user.find({},{_id:0,name:1})

 

# 案例六(错误演示):name返回,age不返回
db.user.find({},{age:0,name:1})

 

三、删除

3.1、删除所有

# 语法
db.集合名称.remove({})

# 案例:删除user集合中所有的文档
db.user.remove({})

3.2、按条件删除

# 语法(适用于MongoDB2.6以后的版本)
db.集合名称.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
参数说明:
    query :(可选)删除的文档的条件。
    justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值     false,则删除所有匹配条件的文档。
    writeConcern :(可选)抛出异常的级别。

 3.2.1、根据id删除文档

# 案例:删除user集合中id为10的文档(这里的id是创建文档时指定的id)

db.user.remove({"_id":10})

# 案例:删除user集合中id为 ObjectId("64770bd69e8658a4223033b4")的文档,说明:此id为Mongo自动生成的id
db.user.remove({"_id":"64770bd69e8658a4223033b4"})

 

 3.2.2、根据字段名称删除所有符合条件的文档

# 往user集合中出入age相同的三条数据进行测试
db.user.insert(
	[
		{
			"name":"张三",
			"age":23
		},
		{
			"_id":2,
			"name":"李四",
			"age":23
		},
		{
			"_id":3,
			"name":"王五",
			"age":23
		}
	]
)

# 删除age为23的文档记录
db.user.remove({"age":23})

  

四、更新文档

4.1、update更新

# 语法
db.集合名称.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

 4.1.1、数据初始化

# 数据初始化
1、清空user集合中所有的数据
db.user.remove({})

2、数据初始化
for (let i = 0; i < 10; i++) {
	db.user.insert({"_id":i+1,"name":"李白","age":20+i});
}
db.user.insert({"_id":11,"name":"李太白","age":35})

3、当前user集合中的文档结构
db.user.find()

4.1.2、将id为11的文档,age修改为30

db.user.update({"_id":11},{"age":30})

 

 4.1.3、保留原始更新

# 案例
db.user.update({"_id":11},{$set:{"name":"李太白","age":30,"likes":["电视","读书","美女"]}})

# 案例
db.user.update({"_id":11},{$set:{"likes":["电视","读书","美女","吸烟","喝酒","烫头"]}})

 4.1.4、批量更新(保留原始更新&更新条件存在)

# 批量将name为李白的文档,年龄统一修改为24
db.user.update({"name":"李白"},{$set:{"age":24}},{multi:true})

 4.1.5、批量更新(保留原始更新&更新条件不存在,upsert为默认值)

# 批量更新name为杜甫的文档,将年龄统一修改为25
db.user.update({"name":"杜甫"},{$set:{"age":25}},{multi:true})

 4.1.6、批量更新(保留原始更新&更新条件不存在,upsert为true)

# 批量更新name为杜甫的文档,将年龄统一修改为25
db.user.update({"name":"杜甫"},{$set:{"age":25}},{multi:true,upsert:true})

说明:upsert设置为true,当匹配不到文档时,将会插入一条新文档

4.2、save更新

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

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

相关文章

Docker 的数据管理和Dockerfile

-------------------------------------------Docker 的数据管理-------------------------------------------- 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 …

ClickHouse集群安装与部署

这是一篇关于讲解如何安装部署ClickHouse集群的参考文章&#xff0c;希望通过此&#xff0c;大家都能了解ClickHouse&#xff0c;都能学会安装配置ClickHouse以及它的使用。 什么是ClickHouse&#xff1f; ClickHouse是Yandex于2016年开源的列式存储数据库(DBMS)&#xff0c;主…

【String字符串之前篇】

目录 1.什么是字符串2.常用字符串的写法3.String字符串的底层原理3.字符串的比较3.1双等号和equals3.2 compareTo(String s) 方法3.3compareToIgnoreCase方法 4.String查找方法5.字符串的转换5.1字符串与数字转换5.2 大小写转换5.3 字符串与数组的转换 1.什么是字符串 对于&quo…

项目经理提升领导力的6个重点

1、以身作则 作为团队的领导者&#xff0c;要想更好地调动团队的积极性&#xff0c;最直接简单的方法就是以身作则&#xff0c;做团队的榜样。在要求团队成员之前&#xff0c;自己先做好&#xff0c;关键时候需身先士卒。 项目经理提升领导力的6个重点 2、共同目标 项目团队的共…

DataSecurity Plus:数字化时代的数据安全护卫者

引言&#xff1a; 在数字化时代&#xff0c;数据成为企业和个人生活中不可或缺的资产。然而&#xff0c;随之而来的是日益增长的数据安全威胁。为了保护数据的机密性、完整性和可用性&#xff0c;数据安全解决方案——DataSecurity Plus应运而生。本文将深入探讨DataSecurity …

嵌入式Android系统耳机驱动基本知识

开发项目的时候&#xff0c;接手的第一个驱动就是android平台下耳机的插拔检测和按键检测​。这部分涉及的硬件知识比较简单&#xff0c;但是软件上对中断的处理&#xff0c;软件检测的鲁棒性&#xff0c;都有比较高的要求&#xff0c;涉及到驱动开发中经常使用的中断申请&…

Linux下Python脚本的编写解析fio测试log(四)

在我们平常的测试盘的过程中,fio是一款业界最为通用的工具&#xff0c;通过Fio可以只知道一个盘具体的带宽,iops,延迟等等.比如下面这段fio的log 这里边需要拿出log里的一些参数 做成表格 如下&#xff1a; 下面说下如何用Python解析log并做成表格 1 同样是用到Python中文件…

【裸机驱动LED】使用汇编代码驱动LED(二)—— 汇编代码编写篇

上一部分我们已经整理出了所需寄存器的基地址、初始值&#xff0c;因为我们要给寄存器赋值&#xff0c;其实就是向指定地址写入内容。下面所有用到的基地址和初始化值都在上一篇总结好了。 【裸机驱动LED】使用汇编代码驱动LED&#xff08;一&#xff09;—— 寄存器解析篇_仲…

Nginx+Tomcat负载均衡,动静分离

文章目录 一.Nginx应用1.1Nginx负载均衡实现原理1.2Nginx动静分离实现原理 二.NginxTomcat负载均衡、动静分离&#xff08;七层实例&#xff09; 一.Nginx应用 Nginx是一款非常优秀的HTTP服务软件 支持高达50000个并发连接数的响应拥有强大的静态资源处理能力运行稳定内存、C…

spring.factories

Spring Boot 如何管理第三方Bean 首先抛出一个问题&#xff1a;如果想要被Spring容器管理的Bean的路径不再Spring Boot 的包扫描路径下&#xff0c;怎么办呢&#xff1f;也就是如何去加载第三方的Bean 呢&#xff1f;换句话说:在 Spring Boot 项目中&#xff0c;如果你想要被 …

使用 PicX 创建免费的图床神器

写博客文章时&#xff0c;图片的上传和存放是一个问题&#xff0c;我们也许会在不同的平台发布同一篇文章&#xff0c;这样一来每个平台都要上传图片。为了解决这些问题&#xff0c;做法是把图片统一上传到一个在线的第三方静态资源库中&#xff0c;我们把这个资源库称为图床。…

【博学谷学习记录】超强总结,用心分享丨人工智能 AI项目 ROUGE评估算法简记

目录 ROUGE核心思想评价标准ROUGE-NROUGE-L ROUGE ROUGE的全称是Recall-Oriented Understudy for Gisting Evaluation, 是一种基于召回率指标的评价算法. 核心思想 由多个专家分别生成人工摘要, 构成标准摘要集. 将模型生成的自动摘要和人工摘要做对比, 通过统计两者之间重叠…

C++ 结构体声明(定义)以及不同写法的差异

定义方式总结 在C中&#xff0c;结构体&#xff08;struct&#xff09;的定义主要有多种形式&#xff0c;&#xff0c;你还可以在定义结构体时直接初始化它的成员&#xff0c;或者在定义后创建结构体的实例。以下是一些例子&#xff1a; 定义并初始化结构体&#xff1a; str…

gitlab基本操作

1.gitlab 基本操作 git branch // 查看分支 git branch dev //新建dev 分支 git checkout dev //切换到dev 分支修改 **** git status // 查看哪些文件被修改 git add . //修改了文件需要提交添加上去&#xff08;注意 . 点号&#xff09; git commit -m “update”…

重温数据结构与算法之A star 算法

文章目录 前言一、原理1.1 网格距离1.2 宽度优先搜索1.3 Dijkstra 算法1.4 最佳优先搜索1.5 A*算法 二、代码实现2.1 伪码2.2 python 实现2.3 可视化 三、优缺点分析3.1 优点3.2 缺点 参考 前言 A*(A-Star)算法是一种静态路网中求解最短路径有效的直接搜索方法&#xff0c;也是…

uniapp(三) 之 表单提交

更换UI库 经过我昨天仔细看了下ThorUI&#xff0c;里面有个会员组件&#xff0c;好像有用的组件都是会员组件一样&#xff0c;作为一个白嫖怪&#xff0c;我决定今天再换一个UI库 引入后&#xff0c;根据组件位置自行调整位置 好了现在使用UNI-UI了 但是我的语法是vue3,官网范…

Hadoop数据仓库的主要特征有哪些?

数据仓库(英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW),是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持(Decision Support)。 数据仓库本身并不“生产”任何数据&#xff0c;其数据…

Nebula分布式集群

2022年9月15日18:47:38文章目录 Nebula1.安装:2.数据模型3.NebulaGraph 架构总览4.基本命令文档4.0 数据类型4.1 spaces图空间CREATE SPACEDROP SPACECLEAR SPACESHOW SPACESDESC SPACE 4.2 Tag4.3 edge4.4 点语句INSERT VERTEXDELETE VERTEXUPDATE VERTEXUPSERT VERTEX 4.5 边…

day11 -- 存储过程+触发器+事物处理

学习内容 什么是存储过程 如何使用存储过程 学习记录 存储过程 经常会有一个完整的操作需要多条语句才能完成。 此外&#xff0c;需要执行的具体语句及其次序也不是固定的&#xff0c;它们可能会根据条件而选择性的执行。 那应该怎么办呢&#xff1f;可以创建存储过程。 存储…

工业镜头分类、相关参数含义

一、工业镜头参数 1、焦距/后焦距 焦距是像方主面到像方焦点的距离。后焦距指光线离开镜头最后一片镜片表面到sensor感光面的距离&#xff0c;如8mm&#xff0c;16mm&#xff0c;25mm等&#xff1b; 焦距的大小决定着视角大小&#xff0c;焦距数值小&#xff0c;视角大&#…