持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
集合的创建
MongoDB 数据库中的集合也叫做“文档集合”(相当于关系型数据库的表),它是用来存放文档(也就是一条数据)的。
创建有两种方式:
方式一:在添加第一条数据的时候顺便创建集合(前面实验中也提到过)。
use 数据库名字
db.集合名字.insertOne({"name":"xiaolan", "age":18, "hobby":["篮球","排球"]})
然后通过 show collections查看已有集合
方式二:使用 createCollection() 方法来创建集合。
语法格式:
db.createCollection(name, options)
- name:要创建的集合名称
- options:可选参数,指定有关内存大小及索引的选项,用于对集合增加一些限制:
db.createCollection('集合名字')
然后使用show table查询集合
show tables 命令跟 show collections 作用一样,都可以用来查询已有集合。
集合的删除
语法格式:
db.collection.drop()
其中 collection 指的是具体的集合名称。如果成功删除选定的集合,则 drop() 方法会返回 true,否则返回 false。
实例:删除 zss 数据库中的 zs 这个集合。
- 首先查询已存在的集合
> use zss
switched to db lanqiao
> show collections
zs
>
- 删除
zs这个集合
> db.zs.drop()
true
> show tables
以上就是集合的删除,很简单。
到这里,我们已经知道了如何创建一个集合,接下来将给大家讲解如何对集合进行数据的增删改。接下来我们就一起来学习吧 😊。
在 MongoDB 中我们可以使用以下方法进行数据插入操作:
insert():若插入的数据主键已经存在,则会抛出 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。save():如果_id主键存在则更新数据,若不存在就插入数据。insertOne():3.2 版本之后新增的,用来向集合中插入一个新文档。insertMany():3.2 版本之后新增的,用来向集合中插入一个或多个新文档。
插入
使用insert
需求:创建 zhangsan 数据库和 zs 集合,并给 zs 集合中插入一些课程信息的数据文档。
use zhangsan
db.zs.insert([
... {cno: '10001',cname: 'Java 程序设计',description: '这是一门 Java 新手课程',teacher: '张无忌'},
... {cno: '10002',cname: 'Web 前端开发',description: '这是一门前端进阶课程',teacher: '小龙女'},
... {cno: '10003',cname: 'Python 基础开发',description: '这是一门 Python 新手课程',teacher: '杨过'},
...])
使用 find() 方法可以查看已经存在的文档。
> db.lq1.find()
{ "_id" : ObjectId("616fb3331cdd487e7810011f"), "cno" : "10001", "cname" : "Java 程序设计", "description" : "这是一门 Java 新手课程", "teacher" : "张无忌" }
{ "_id" : ObjectId("616fb3331cdd487e78100120"), "cno" : "10002", "cname" : "Web 前端开发", "description" : "这是一门前端进阶课程", "teacher" : "小龙女" }
{ "_id" : ObjectId("616fb3331cdd487e78100121"), "cno" : "10003", "cname" : "Python 基础开发", "description" : "这是一门 Python 新手课程", "teacher" : "杨过" }
>
使用 save() 方法进行数据的插入
db.zs.save({cno: '10004',cname: 'SSM 框架',description: '这是框架课程',teacher: 'zs'})
使用 insertOne() 方法进行数据的插入
db.zs.insertOne({name:'James', age:23, addr:['Min','Cle']})
使用 insertMany() 方法进行数据的插入
db.lq2.insertMany([ ... {name:'Curry', age:35, addr:['Gsw','Chi']}, ... {name:'Wade', age:34, addr:['Min','Chi']} ... ])
- 补充:如果想查询出来的结果展示更加美观,可以使用
pretty()函数进行格式化。
db.lq2.find().pretty()
{ "_id" : ObjectId("616fbad31cdd487e78100124"),
"name" : "James",
"age" : 23,
"addr" : [ "Min", "Cle" ] }
更新:
update():用于更新已存在的文档
基本语法如下
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:
| 参数 | 说明 |
|---|---|
| query | 第一个用来确定更新哪一条或哪几条文档,也就是查询条件 |
| update | 用来提供更新的字段及其值 |
| upsert | 可选。如果不存在更新的记录,是否插入新对象(true 为插入,false 不插入,默认为 false) |
| multi | 可选。默认为 false,只更新找到的第一条记录;如果设置为 true,就会将查出来的记录全部更新 |
| writeConcern | 可选。抛出异常的级别 |
save():通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。
基本语法如下:
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
参数说明:
- document:文档数据
- writeConcern:可选,抛出异常的级别
》 ✨ 说明:save() 方法本质是保存文档,如果执行更新操作,参数键值对中需要提供该文档中所有键值对数据,新的数据会覆盖原有的数据。
删除文档
MongoDB 中删除文档的方法有以下几个:
- remove() :用来移除集合中的数据(已经过时),现在官方已不推荐使用。
- deleteOne():用来删除一条数据
- deleteMany():用来删除多条数据
使用 deleteOne() 方法删除数据
db.zs.deleteOne({cno:'10001'})
》如果有多条数据满足删除的条件,也只会删除第一个满足条件的数据。
使用 deleteMany() 方法删除数据
db.zs.deleteMany({teacher:'zs'})
》如果要删除满足多个条件数据,该如何实现呢?🤔️
首先肯定是选择 deleteMany() 方法,然后结合具体的需求实现
文档的查询
find():用来查询文档数据
-
基本语法:
db.collection.find(query,projection) -
参数说明:
- query:可选,使用查询操作符指定查询条件。
- projection:可选,使用投影操作符指定返回的键。省略该参数返回匹配文档中所有键值(默认省略)。
findOne():仅返回一个满足输入条件的文档并且自动格式化显示文档数据。
-
基础语法:
db.collection.findOne(query,projection) -
参数说明:
- query:可选,使用查询操作符指定查询条件。
- projection:可选,使用投影操作符指定返回的键。省略该参数返回匹配文档中所有键值(默认省略)。
MongoDB 的 find() 方法传入多个参数并且条件之间是且的关系,语法格式如下:
db.collection.find({key1:value1, key2:value2})
MongoDB 中的 OR 条件需要使用关键字(操作符) $or,语法如下:
db.collection.find({$or: [{key1: value1}, {key2:value2}]})
条件操作符用于比较两个表达式并从 MongoDB 集合中获取数据,接下来我们就一起来看看 MongoDB 中的常用操作符,如下表所示:
| 操作 | 操作符 | 语法 |
|---|---|---|
| 大于(>) | $gt | db.collection.find({age:{$gt:34}}) |
| 小于(<) | $lt | db.collection.find({age:{$lt:34}}) |
| 大于等于(>=) | $gte | db.collection.find({age:{$gte:34}}) |
| 小于等于(<=) | $lte | db.collection.find({age:{$lte:34}}) |
过滤和排序的方法
👨🏫:MongoDB 中也可以针对查询的结果进行过滤和排序,接下来我们就一起来看看吧。
-
Limit():读取指定数量的数据记录基本语法如下:
db.collection.find().limit(number)参数:
number:是指定读取数据的数量
skip():用来跳过指定数量的数据记录。
基本语法如下:
db.collection.find().skip(number)
参数:
number:是指定跳过数据的数量
sort():可以用来对查询的结果进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 或 -1 来指定排序的方式,其中 1 为升序排序,-1 为降序排序。
基本语法如下:
db.collection.find().sort({key:1})