MongoDB学习笔记三

news/2024/11/24 21:02:48/

目录

1.数据库增删

1.1数据库创建

 1.2数据库删除

 2.集合增删

2.1创建集合

 2.2删除集合

 3.文档增删改查

3.1查询文档

3.2创建文档

3.3删除文档

3.4更新/修改文档


1.数据库增删

1.1数据库创建

数据库创建语法格式:

use DatabaseName

在mongodb中使用use与在mysql中使用use database一致,都是选择需要使用的数据库;不同的是当mongodb中不存在该数据库,那么它会自动创建该数据库;

mongodb中默认的数据库为 test,如果你没有创建新的数据库,那么你所创建的集合将默认存放在 test 数据库中

注意:新建的数据库中,如果没有集合,那么它就是空的数据库,下次重新选择时又会重新创建,如果要保存该数据则请随便插入一个集合;

 1.2数据库删除

数据库删除语法格式:

db.dropDatabase()

删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名

下面我们来删除demo数据库,以图片为例

 2.集合增删

2.1创建集合

创建集合语法:

db.createCollection(collectionName);

db.createCollection(collectionName, options);

直接使用db.createCollection(collectionName),则集合会使用默认的参数创建指定名字的集合

使用db.createCollection(collectionName, options),则需要手动指定参数,例如:

db.createCollection("demo", {size: 10000, max:10000})

options参数说明:

字段类型描述
capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。
autoIndexId布尔3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size数值(可选)为固定集合指定一个最大值,即字节数。
如果 capped 为 true,也需要指定该字段。
max数值(可选)指定固定集合中包含文档的最大数量。

 2.2删除集合

删除集合语法:

db.collectionName.drop()

删除成功返回true,删除失败返回false;

我们可以通过show tables或show collections来查看已有的集合

 3.文档增删改查

3.1查询文档

语法格式:

db.collectionName.find()

db.collectionName.find().pretty()  // 格式化显示所有文档

查询所有:

db.collectionName.find()

查询指定条件:

db.collectionName.find({"age":24})

 多条件查询:

db.collectionName.find({key:value,key:value,key:value,...})

db.collectionName.find({$or:[{key:value},{key:value},....]})

and查询:

or查询:

 and和or查询联合使用:

 大小条件语句查询:

操作格式示例sql中的类似语句
等于{<key>:<value>}db.col.find({"key":"value"}).pretty()where by = 'key'
小于{<key>:{$lt:<value>}}db.col.find({"key":{$lt:50}}).pretty()where likes < 50
小于或等于{<key>:{$lte:<value>}}db.col.find({"key":{$lte:50}}).pretty()where likes <= 50
大于{<key>:{$gt:<value>}}db.col.find({"key":{$gt:50}}).pretty()where likes > 50
大于或等于{<key>:{$gte:<value>}}db.col.find({"key":{$gte:50}}).pretty()where likes >= 50
不等于{<key>:{$ne:<value>}}db.col.find({"key":{$ne:50}}).pretty()where likes != 50

3.2创建文档

创建文档语法格式:

db.collectionName.insert(document)

db.collectionName.save(document)

save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。

insert(): 若插入的数据主键已存在,则抛出 org.springframework.dao.DuplicateKeyException 

异常,提示主键重复,不保存当前数据。

3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()

insertOne():

 insertMany():

以上是一般的正常插入语句写法,接下来我们玩点高级的,通过不知道大家有主要到我上面插入语句中写的document吗?是的,接下来我们使用document对象插入,展示:

除了我这里用的insertOne()方法你当然也可以使用insert(document)或save(document)

当然你也可以写多个document,然后使用insertMany()插入

语法insertMany([document1,document2,do........])

3.3删除文档

语法格式:

db.collectionName.remove()

删除示例:

需要注意, 直接使用remove()会删除所有的数据,如果只需要删除一条数据那么需要加上remove({},1)

3.4更新/修改文档

语法格式:

db.collectionName.update(<query>,<updatedata>)

db.collectionName.save(document)

详细的介绍属性如图:

参数说明:

query : update的查询条件,类似sql update查询内where后面的。

update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern :可选,抛出异常的级别。

实际上使用的时候没有这么复杂,我们只需要在(<query>,<updatedata>)query中输入条件,在updatedata中输入更新数据即可,例如:

如此更新只会修改一条数据,所以我们需要为他添加另一条参数实现批量修改,如图:

 更多实例:

说明语法演示
只更新第一条记录db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一条db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加进去db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一条记录db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );


http://www.ppmy.cn/news/101763.html

相关文章

Python日期带时区转换工具类总结

文章目录 1.背景2. 遇到的坑3. 一些小案例3.1 当前日期、日期时间、UTC日期时间3.2 昨天、昨天UTC日期、昨天现在这个时间点的时间戳3.3 日期转时间戳3.4 时间戳转日期3.5 日期加减、小时的加减 4. 总结5. 完整的编码 1.背景 最近项目是国际项目&#xff0c;所以需要经常需要用…

vue项目中使用depcheck检查缺失的依赖项目

使用depcheck检查缺失的项目依赖 由来&#xff1a;今天在做地铁的时候&#xff0c;刷短视频发现一个非常好用的东西&#xff0c;分享一下 它可以帮助我们找出问题&#xff0c;在 package.json 中&#xff0c;每个依赖包如何被使用、哪些依赖包没有用处、哪些依赖包缺失。它是解…

【Netty】使用 SSL/TLS 加密 Netty 程序(二十)

文章目录 前言一、SSL/TLS概述二、Sslhandler类 前言 回顾Netty系列文章&#xff1a; Netty 概述&#xff08;一&#xff09;Netty 架构设计&#xff08;二&#xff09;Netty Channel 概述&#xff08;三&#xff09;Netty ChannelHandler&#xff08;四&#xff09;ChannelP…

Python绘图神器Plotly安装、使用及导出图像教程

1. Plotly安装 Plotly 是一个快速完善并崛起的交互式的、开源的绘图库库&#xff0c;Python 库则是它的一个重要分支。现已支持超过40种独特的图表类型&#xff0c;涵盖了广泛的统计、金融、地理、科学和三维用例。 Python 中可以使用 pip 或者 conda 安装 Plotly&#xff1a…

[WPA3认证][BUG]WPA3AP部分的4.8.2case测试失败分析

Log分析: 仪表log如下: 2023-02-22 14:03:09.487 - INFO - SNIFFER (192.168.250.203:9999) ---> sniffer_control_start,Program,WPA3,Filename,_SAE_482_step6,channel,44,bandwidth,20 内部测试sniffer Tag: HT Information (802.11n D1.10) Tag Number: HT Info…

音乐小白乐器选择,如何学一手才艺,推荐尤克里里

乐器难度说明 注意&#xff1a;这里的难度说明是音准的难度&#xff0c;就是能不能发出标准的声音 乐器按照演奏方式分类&#xff0c;分为 演奏方式乐器举例难度等级难度说明敲击木鱼&#xff0c;架子鼓&#xff0c;钢琴1敲击乐是音最准的&#xff0c;敲哪个地方就发什么音&…

前端数据可视化开发平台FlyFish数据源应用教程详解

介绍 飞鱼&#xff08;FlyFish&#xff09;是云智慧开源的一款免费的数据可视化编排平台。通过简易的方式快速创建数据模型&#xff0c;通过拖拉拽的形式&#xff0c;快速生成一套数据可视化解决方案。在飞鱼产品中可以通过直接连接 MySQL 、 Oracle 等数据库直接从数据源中获…

企业产品操作手册,真的很有必要吗?

产品操作手册是一种对于产品使用者而言非常重要的工具。它是一份向用户介绍产品使用方法和功能的文档&#xff0c;可以提供关于产品的详细信息&#xff0c;解答用户的疑问&#xff0c;并帮助用户快速上手使用产品。 产品操作手册的必要性&#xff1a; 一、提高用户使用体验 …