4、CRUD
mongo数据库和平时常见的关系型数据库一样,最基本的操作就是增删改查,唯一的区别就是叫法不一样
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
4.1 插入文档
插入文档本质就是向集合中插入数据,用关系型数据库的语句解释就是向数据表中插入数据
语法
#单个插入
db.collection_Name.insertOne(document)
#多个插入
db.collection_Name.insertMany([document])
例子:
#单个插入
db.test1.insertOne({name:"mongo",type:1,value:1})
#多个插入
db.test1.insertMany([
{
name:"mysql",
type:2,
value:2
},{
name:"oracle",
type:3,
value:3
},{
name:"nosql",
type:4,
value:4
},{
name:"xiaoming",
sex:"男",
age:20,
address:"江苏省南京市浦口区××××××苑×××××单元×××××楼×××××××户"
}
]
)
# 查看集合中的文档
db.test1.find()
4.2 更新文档
更新文档本质就是更新文档中的数据,用关系型数据库的语句解释就是更新数据表中的数据
```语法:`
#单行更新
db.test1.updateOne(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
#多行更新
db.test1.updateMany(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明
- query : update的查询条件,类似sql update查询内where后面的。
- update : 更新的内容,也可以理解为sql update查询内set后面的
- upsert : 可选,默认是false,即当更新的条件不存在时不插入,true为插入,即当更新的条件不存在时,也插入数据。
- multi : 可选,默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
例子:
-
不插入只更新第一条记录
db.test1.updateOne({name:"mongo"},{$set:{type:99}})
- 不插入只更新所有匹配条件的文档
db.test1.updateMany({name:"redis"},{$set:{type:111}})
4.3 查询文档
查询文档本质就是查询文档中的数据,用关系型数据库的语句解释就是查询数据表中的数据
语法
db.collection_name.find()
4.3.1 普通查询
普通查询:根据具体的某个条件进行查找
例子:
#查找集合中全部的文档
db.test1.find()
#查找名字为mongo的文档
db.test1.find({name:"mongo"})
#查找值为空的文档
db.test1.find({value:null})
4.3.2 模糊查询
在对数据库中的数据进行操作时,我们经常会使用到模糊查找,在mongo中也支持模糊查找,需要使用到$regex
例子
#查找名字中包含m的文档
db.test1.find({name:{$regex:/m/}})
#查找名字以m开头的文档
db.test1.find({name:{$regex:/^m/}})
4.3.3 条件查询
在对数据库中的数据进行操作时,我们经常会使用到条件查找,在mongo中也支持条件查找
例子
#查询类型不为111的文档
db.test1.find({type:{$ne:111}})
#查询类型不为111且名字已m开头的文档
db.test1.find({type:{$ne:111},name:{$regex:/^m/}})
#插叙名字为mongo或者type为空的文档
db.test1.find({
$or:
[
{name:"mongo"},
{type:null}
]
})
#插叙名字为mongo或者type为空且value为1的文档
db.test1.find({
$or:
[
{name:"mongo"},
{type:null}
],
value:1
})
4.4.4 投影查询
MongoDB 中的投影即查询指定的字段,而不是直接查询文档的全部字段。1标识显示,0标识隐藏
语法
db.ollection_name.find({file:1,file2:0})
例子
#插叙名字为mongo或者type为空且value为1的文档,要求只展示名字和类型
db.test1.find({
$or:
[
{name:"mongo"},
{type:null}
],
value:1
},{_id:0,name:1,type:1})
4.4.5 限制查询
mongo中的限制查询就是限制查询出来数据的数量
语法
db.test1.find().limit(count)
参数说明
count:需要限制的条数
例子:
#限制输出2条
db.test1.find().limit(2)
4.4.6 跳跃查询
mongo中的跳跃查询是指跳过指定的条数,然后查找满足条件的文档
语法
db.test1.find().skip(count)
参数说明
count:跳过的条数
例子
#跳过前两条
db.test1.find().skip(2)
#跳过前两条查找,并且返回3条数据,
db.test1.find().skip(2).limit(3)
#跳过前两条查找,并且返回3条数据
db.test1.find().limit(3).skip(2)
在聚合查询时,limit和skip有先后顺序关系
4.4.7 排序查询
排序查询是指将查询的结果进行排序, 其中 1 为升序排列,而 -1 是用于降序排列。
语法
db.COLLECTION_NAME.find().sort({KEY:1})
例子
db.test1.find().sort({name:-1})
4.4. 删除文档
在mongo中删除文档是指删除集合中的数据
语法
单个删除
db.collection.deleteOne(filter, options)
多个删除
db.collection.deleteMany(filter, options)
参数说明
- filter参数用于指定需要删除的文档条件
- options参数可以用于指定一些额外选项
例子
db.test1.deleteOne({type:null})
db.test1.deleteMany({type:null})