MongoDB
是一个跨平台的,以 JSON
为数据模型的文档数据库,是当前 NoSQL
数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。
1、 MongoDB
与 MySQL
数据库
- 数据库操作
--创建数据库
use db1
--查看数据库
show dbs
--删除数据库
db.dropDatabase()
- 集合操作
--创建集合
db.createCollection("users")
--查看集合
show collections
--删除集合
db.users.drop()
2、mongoDB数据操作
2.1、文档的插入操作
注意:在 MongoDB
中不需要提前创建集合就可以直接插入文档,在插入文档的同时自动创建集合
- 插入文档
db.fruits.insert(
[
{ "name": "apple", "price": 10, "color": ["red", "green"], },
{ "name": "banana", "price": 8, "color": ["yellow", "green"], },
{ "name": "mongo", "price": 12, "color": ["yellow", "green"], },
]
)
- 插入一条文档
db.users.insertOne(
{
"username": "zhangsan",
"password": "88888888",
"form": { "country": "China", "city": "Beijing" }
}
)
- 插入多条文档
db.users.insertMany(
[
{
"username": "lisi",
"password": "4444",
"form": { "country": "China", "city": "Shanghai" }
},
{
"username": "wanger",
"password": "666666",
"form": { "country": "China", "city": "Shenzhen" }
},
]
)
2.2、文档的查询操作
- 单条件查询文档
db.users.find(
{ "username": "zhangsan" }
)
- 多条件
and
查询文档
db.users.find(
{ "username": "zhangsan", "password": "88888888" }
)
- 多条件
and
查询文档的另一种形式
db.users.find(
{
$and: [
{ "username": "zhangsan" },
{ "password": "88888888" }
]
}
)
- 多条件
or
查询文档
db.users.find(
{
$or: [
{ "username": "zhangsan" },
{ "password": "88888888" }
]
}
)
- 正则表达式查询文档
db.users.find(
{ username: /^zhang/ }
)
- 查询条件对比表
- 查询逻辑对照表
- 查询子文档
db.users.find(
{ "form.country": "China" }
)
- 控制查询返回的字段
db.fruits.find(
{ "name": "apple" }, { "_id": 0, "name": 1, "color": 1 }
)
注意:其中 _id
name
color
的 0
表示不返回字段,其中的 1
表示返回字段
2.3、文档的更新操作
- 更新一条文档
db.fruits.updateOne(
{ "name": "banana" }, { $set: { "price": 20 } }
)
注意:updateOne
不管查询到多少条文档都只更新第一条文档
- 更新多条文档
db.fruits.updateMany(
{ "name": "banana" }, { $set: { "price": 20 } }
)
注意:updateMany
查询到多少条文档就更新多少条文档
- 更新数组操作符
2.4、文档的删除操作
-
删除
price = 10
的文档
db.fruits.remove(
{ "price": 10 }
)
- 删除
price < 12
的文档
db.fruits.remove(
{ "price": { $lt: 12 } }
)
- 删除所有文档
db.fruits.remove({})
3、聚合查询
在 MongoDB
中聚合查询 aggregate
是以管道的形式进行处理数据并主要用于处理数据统计、平均值、求和等
- 聚合查询
db.fruits.aggregate(
[
{ $group: { _id: "$name", total: { $sum: 1 } } },
{ $project: { name: "$name", total: "$total" } },
]
)
注意:这里对 fruits
集合进行聚合查询,先按 name
字段进行分组并合计分组的数量,然后在返回 name
字段和分组后的 total
字段进行显示
- 常用聚合查询对照表
4、索引
db.fruits.createIndex(
{ name: 1 },
{ background: true },
)
注意:创建索引最好的方法是使用 ESR
原则,精确( Equal
)匹配的字段放在最前面,排序( Sort
)条件放中间,范围( Range
)匹配的字段放最后
5、备份与恢复
- 备份
db1
数据库中的users
集合
mongodump -h 127.0.0.1:27017 -d db1 -c users
注意:备份时不指定路径,默认备份在 /dump
目录中,如果数据库有权限请加上 -u username -p password
和 --authenticationDatabase admin
参数执行命令
- 恢复
db1
数据库中的users
集合
mongorestore -h 127.0.0.1:27017 -u username -p password -d db1 -c users /dump/db1/users.bson --authenticationDatabase admin
注意:恢复时指定路径在 /dump
目录中的具体文件,如果数据库有权限请加上 -u username -p password
和 --authenticationDatabase admin
参数执行命令