MongoDB 就是这样一款非关系型的,基于分布式文件存储的数据库。由C++语言编写。
什么叫非关系型?
就是把数据直接放进一个大仓库,不标号、不连线、单纯的堆起来。传统数据库由于受到各种关系的累赘,各种数据形式的束缚,难以处理海量数据以及超高并发的业务场景。
数据库基本概念
一个 MongoDB 可以创建多个数据库
- 使用 show dbs 可以查看所有数据库的列表
- 执行 db 命令则可以查看当前数据库对象或者集合
- 运行 use 命令可以连接到指定的数据库
文档
文档是 MongoDB 的核心,类似于 关系数据库中的每一行数据。多个键及其关联的值放在一起就是文档。
{"name":"H3108"}
文档的逻辑联系
# user文档
{
"name": "Tom Hanks",
"contact": "987654321",
"dob": "01-01-1991"
}
# address文档
{
"building": "22 A, Indiana Apt",
"pincode": 123456,
"city": "chengdu",
"state": "sichuan"
}
- 嵌入式关系:把 address 文档嵌入到 user 文档中
# 这就是嵌入式的关系
{
"name": "Tom Hanks",
"contact": "987654321",
"dob": "01-01-1991",
"address":
[{
"building": "22 A, Indiana Apt",
"pincode": 123456,
"city": "chengdu",
"state": "sichuan"
},
{
"building": "170 A, Acropolis Apt",
"pincode": 456789,
"city": "beijing",
"state": "beijing"
}]
}
- 引用式关系:将两个文档分开,通过引用文档的_id 字段来建立关系
# 这就是引用式关系
{
"name": "Tom Benzamin",
"contact": "987654321",
"dob": "01-01-1991",
"address_ids": [
ObjectId("52ffc4a5d85242602e000000") #对应address文档的id字段
]
}
在实际应用的时候,嵌入式关系比较适合一对一的关系,引用式关系比较适合一对多或者多对多的情况。
集合
集合就是一组文档的组合,就相当于是关系数据库中的表,在 MongoDB 中可以存储不同的文档结构的文档。
{"name":"H3108"} {"sex":"man","age":"0"}
元数据
数据库的信息存储在集合中,他们统一使用系统的命名空间:DBNAME.system.*
DBNAME 可用 db 或数据库名替代:
- DBNAME.system.namespaces :列出所有名字空间
- DBNAME.system.indexs :列出所有索引
- DBNAME.system.profile :列出数据库概要信息
- DBNAME.system.users :列出访问数据库的用户
- DBNAME.system.sources :列出服务器信息
数据库操作
创建数据库
进入 MongoDB 命令行:
`mongo`
使用 use 命令创建数据库:
`use mydb`
查看当前连接的数据库:
`db`
查看所有的数据库:
`show dbs`
列出的所有数据库中看不到 mydb 或者显示 mydb(empty) ,
因为 mydb 为空,里面没有任何东西,MongoDB 不显示或显示。
销毁数据库
use 命令进入数据库:
`use mydb`
使用 db.dropDatabase() 销毁数据库:
`db.dropDatabase()`
查看所有的数据库:
`show dbs`
可以发现 mydb 数据库已经被删除了。
集合操作
创建集合
use 命令进入数据库:
`use mydb`
使用 db.createCollection() 创建集合:
`db.createCollection("users")`
查看创建的集合:
`show collections`
删除集合
查看创建的集合:
`show collections`
使用 db.**.drop() 删除集合:
`db.users.drop()`
查看创建的集合:
`show collections`
insert()
insert 是插入,侧重于新增一个记录
db.users.insert([
{ name : "jam",
email : "jam@qq.com"
},
{ name : "tom",
email : "tom@qq.com"
}
])
save()
save 是保存,可以保存一个新的记录,也可以保存对一个记录的修改
db.users.save([
{ name : "jam",
email : "jam@qq.com"
},
{ name : "tom",
email : "tom@qq.com"
}
])
网友评论