安装参考文档:https://mongodb.net.cn/manual/tutorial/install-mongodb-on-debian/
请写出MongoDB术语相对应的关系数据库术语
关系数据库 术语/概念 | MongoDB 术语/概念 |
---|---|
数据库 database | 数据库 database |
表 table | 文档集/集合 colleaction |
行 row | 文档 document or BSON 文档 |
列 column | 字段/域 field |
索引 index | 索引 index |
表链接 | $lookup,嵌入式文件(3.2新增) |
主键 primary key | 对象主键(Objectid) primary key (自动将id字段设置为主键) |
聚类 (eg: groupby) | 聚合管道 |
其余未深入了解,暂不列出。
详细可查阅:
https://mongodb.net.cn/manual/reference/sql-comparison/
https://mongodb.net.cn/manual/reference/sql-aggregation-comparison/
并简述MongoDB特点。
MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。
使用文档的优点是
- 文档(即对象)对应于许多编程语言中的本机数据类型。
- 嵌入式文档和数组减少了对昂贵连接的需求。
- 动态模式支持流畅的多态性。
MongoDB提供高性能的数据持久性。
- 对嵌入式数据模型的支持减少了数据库系统上的I / O活动。
- 索引支持更快的查询,并且可以包括来自嵌入式文档和数组的键。
高可用性
MongoDB的复制工具(称为副本集)提供:
- 自动故障转移
- 数据冗余。
副本集是一组保持相同的数据集,从而提供冗余和提高数据可用性的MongoDB服务器。
水平可伸缩性
- 分片在一组计算机集群分布数据。
- 从3.4开始,MongoDB支持基于shard键创建数据区域。在平衡的集群中,MongoDB仅将区域覆盖的读写定向到区域内的那些分片。
其他特点
- 支持特别查询:在MongoDB中,可以通过字段,范围查询进行搜索,并且还支持正则表达式搜索。
- 索引可以索引文档中的任何字段。
- 复制MongoDB支持主从复制。主机可以执行读写操作,从机从主机复制数据,只能用于读取或备份(不写入)
- 复制数据MongoDB可以在多台服务器上运行。 复制数据以保持系统正常运行,并在硬件故障的情况下保持其运行状态。故障的情况下易于管理。
- 具有自动负载平衡配置。
- 支持映射缩减和聚合工具
- 使用JavaScript而不是Procedure
- 高性能
- 轻松存储任何大小的文件,而不会使堆栈复杂化
完成如下数据库shell命令操作内容:
- 建立一个工作室学习数据库,并建立学生信息文档集,其中需含有(姓名,年龄,工作室编号,学号,简历)等字段(field),简历字段为字符串类型;
造数据
import random
import faker
import json
f = open("stuInfo.json", 'w')
fkName = faker.Faker(locale='zh_CN')
stuId = 123456789000
studioId = [6811, 6813, 6816, 6817, 6818]
status = ['群众', '入团积极分子', '团员', '入党积极分子', '预备党员', '党员']
stu = []
for i in range(150):
stuId += 1
p = {
'name': fkName.name(),
'age': random.randint(19, 24),
'stuId': stuId,
'studioId': random.choice(studioId),
'status': random.choice(status),
}
stu.append(p)
random.shuffle(stu)
json.dump(stu, f, ensure_ascii=False)
- 将大数据工作室同学名单插入到文档集,每个工作室不少于10人;
上述问题以及输出一个 stuInfo.json 文件,批量插入即可
> use stuInfo
switched to db stuInfo
> db.stuInfo.insert('内容')
# 此处会将json中数据批量插入
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
stuInfo 0.000GB
# 可以发现创建成功
> db.stuInfo.find({})
> db.stuInfo.count()
# 可分别查看插入内容以及插入数据记录数
由于插入数据量较大,此处不完整展示
- 查找年龄大于22岁的同学信息;
> db.stuInfo.find({age:{$gt:22}})
- 使用正则表达式或其它方法,查找简历中含有 (“团员” “入团”)字符串的学生信息;
> db.stuInfo.find({$or:[{"status":{$regex:"入团"}},{"status":{$regex:"团员"}}]})
- 根据工作室分类,统计每个工作室的学生人数;
> db.stuInfo.aggregate([{$group : {_id : "$studioId", totalNum : {$sum : 1}}}])
- 将你所在工作室同学的年龄加1。
> db.stuInfo.update({"studioId":6818},{"$inc":{"age":1}},{"multi":true})