MongoDB数据库
MongoDB简介
MongoDB是什么?
MongoDB是一个由 C++ 语言编写的文档型数据库,属于非关系型数据库中的一种。旨在为 Web 应用提供可扩展的高性能数据存储解决方案。
为什么要学习MongoDB?
- 提供高效的数据存储
- 操作语法简单
MongoDB可以做什么?
- 数据存储
MongoDB和传统的数据库有啥区别?
MongoDB是文档型数据库,属于非关系型数据库中的一种。而传统的数据库,例如MySQL、Oracle都是数据关系型数据库。那么非关系型数据库和关系型数据库有啥区别?
NoSQL RDBMS
非结构化的数据 --> key-value 高度结构化的数据 --> 二维表
无结构化的查询语言 结构化的查询语言(SQL)
一般社区维护 官方团队
较为年轻 非常成熟
关系型数据库与mongodb对比
- 存储方面对比:在传统的关系型数据库中,存储方式是以表的形式存放,而在MongoDB中,以文档的形式存在。
- 数据库中的对应关系,及存储形式的说明
一些有用的资源
MongoDB入门学习
菜鸟教程-MongoDB
MongoDB安装和入门使用
MongoDB下载
MongoDB安装
参考【资料里面的 MongoDB 安装教程】
入门使用
MongoDB是一个C/S架构的软件。如果要使用 MongoDB ,则必须先启动 MongoDB 服务,然后在通过客户端进行操作。MongoDB默认在安装目录的 bin 目录下提供了一个 mongo.exe 的客户端命令,我们可以通过该命令来操作MongoDB。
MongoDB服务启动: Windows + r 键 打开命令行,输入如下的命令查看MongoDB的服务。
> services.msc
当服务启动后,则使用 mongo 命令进行操作
> mongo --host 127.0.0.1 --port 27017
注意:如果是在本机,则可以省略 --host 和 --port
> mongo
总结:通过上面的操作我们基本了解了 MongoDB 的功能,接下来我们将学习更多的命令进行 MongoDB 的操作。
命令行操作MongoDB
数据库常用命令
-
Help 查看命令提示
获取数据库级别的帮组
> db.help();
获取集合级别的帮组
> db.集合名称.help(); -
创建/切换数据库
> use dbName; -
查询数据库
> show dbs; -
显示当前 DB 状态
> db.serverStatus(); -
查看当前 DB 版本
> db.version(); -
查看当前 DB 的链接机器IP地址(客户端IP地址)
>db.getMongo(); -
删除数据库
> use 待删除的数据库
> db.dropDatabase();
Collection 聚集集合操作
-
创建一个聚集集合
> db.createCollection(集合名称); -
得到当前 db的所有聚集集合
> show dbs;
或者
> show collections; -
显示当前 db 所有聚集的状态
> db.集合名称.stats();
document 文档操作
-
插入文档
> db.集合名称.insert(对象或数组); -
获得当前 db 的所有文档
> db.集合名称.find();
格式化输出
> db.集合名称.find().pretty(); -
按条件获取文档
> db.集合名称.find({查询的Field: 值}); -
返回满足条件文档的指定字段
> db.集合名称.find({查询的Field: 值}, {待显示的Field: 1, 不显示的Field: 0}); -
更新文档
db.集合名称.update({查询条件}, {$set: {待更新的记录}}); -
删除文档
db.集合名称.remove({删除条件}); -
查询单条文档
> db.集合名称.findOne();
聚合操作
-
条件操作符
- (>) 大于 - $
- gt(<) 小于 - $
- lt(>=) 大于等于 - $
- gte(<= ) 小于等于 - $lte
-
获取文档总数
> db.集合名称.count(); -
Limit 与 Skip 方法
> db.集合名称.find().limit(NUMBER).skip(NUMBER); -
排序
- 可以使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
db.集合名称.find().sort({排序字段:1})
- 可以使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
-
索引
> db.users.ensureIndex({gender:1,user_name:1}); -
查询分析
- 查询分析可以确保我们所建立的索引是否有效,是查询语句性能分析的重要工具 。
- 查询分析常用函数有:explain() 和 hint()
db.集合名称.find(查询条件,显示字段).explain() - indexOnly: 字段为 true ,表示我们使用了索引。
- cursor:因为这个查询使用了索引,MongoDB 中索引存储在B树结构中,所以这是也使用了
- BtreeCursor 类型的游标。如果没有使用索引,游标的类型是 BasicCursor。这个键还会给出你所使用的索引的名称,你通过这个名称可以查看当前数据库下的system.indexes集合(系统自动创建,由于存储索引信息,这个稍微会提到)来得到索引的详细信息。
- n:当前查询返回的文档数量。
- nscanned/nscannedObjects:表明当前这次查询一共扫描了集合中多少个文档,我们的目的是,让这个数值和返回文档的数量越接近越好。
- millis:当前查询所需时间,毫秒数。
- indexBounds:当前查询具体使用的索引
Robo3T 使用
Robo3T 是什么?
Robo 3T是一个支持windows、Mac、Linux三个平台的mongo图形化客户端 。
官网:https://robomongo.org/
为什么要使用 Robo3T?
命令行工具操作MongoDB效率太低,所以使用图形化操作。
Robo3T的使用
- 安装
- 基本使用
Mongoose 操作 Mongodb
Mongoose 是什么?
Mongoose是一个对mongodb进行便捷操作的js工具包。
Mongoose 的使用
- 安装
- 使用
代码托管和webserver和apiserve部署
代码部署
webserver部署
apiserver部署
日常疑问?
- 常见的MongoDB可视化客户端有哪些?
- MongoDB登录授权处理该如何实现?
扩展
- studio 3t 和 robo 3t 之间有啥区别:https://www.oschina.net/p/robo+3t