学习MongoDB
MongoDB介绍
学习MongoDB的网站:https://www.runoob.com/mongodb/mongodb-tutorial.html
MongoDB是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MoongoDB将数据存储为一个文档,数据结构由键值(key=value)对组成。MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组。
创建数据目录
MongoDB将数据目录存储在db目录下,但是这个数据目录不会主动创建,我们在安装完成后需要创建它,请注意,数据目录应该放在根目录下。
具体命令行操作详见文件:C:\Users\94953\Desktop\Mongo基本命令行.txt
MongoDB概念解析
mongodb中基本的概念是文档、集合、数据库。
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库
admin:root数据库,如果将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限,一些特定的服务器端命令也只能从这数据库运行。例如:列出所有的数据库或者关闭服务器。(慎用)
local:这个数据永远不会被复制,可以用来存储于本地单台服务器的任意集合(慎用)
config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
文档Document
文档是一组(key-value)键值对.
一个简单的文档例子如下:
{"site":"www.runoob.com", "name":"菜鸟教程"}
文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型
集合collection
集合是MongoDB文档组
集合存在于数据库中,集合没有固定的结构,这意味着对集合可以插入不同格式和类型的数据
例如:将不同数据结构的文档插入到集合中
{"site":"www.baidu.com"}
{"site":"www.google.com","name":"Google"}
{"site":"www.runoob.com","name":"菜鸟教程","num":5}
MongoDB的数据类型
详情请见:https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html
ObjectId
ObjectId是唯一主键,可以很快的去生成和排序,包含12bytes
MongoDB中存储的文档必须有一个_id键。这个键的值是可以是任意类型,默认是个ObjectID对象。
由于ObjectID中保存了创建的时间戳,我们可以通过getTimestamp函数来获取文档的创建时间:
var newObject=ObjectId()
newObject.getTimestamp()
用命令行打开的MongoDB会话是JavaScript会话,采用JavaScript语言。
MongoDB连接
先启动MongoDB服务器
net start MongoDB
再命令行
mongo
MongoDB创建数据库
在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
MongoDB用户权限问题
MongoDB默认是可以通过权限操作的,当我们在配置文件中使auth=ture,这时我们在进入数据库的时候就需要权限操作了。
MongoDB创建用户的操作为:
db.createUser(
{
user:'niufaandaidan',
pwd:'20190706',
roles:[{role:'userAdminAnyDatabase',db:admin}]
})
创建好超级用户后,此时还不能执行show dbs命令,我们需要进行权限验证db.auth('niufaandaidan','20190706'),此时我们输入show dbs参会显示输出。
admin
config
local
这三个数据库是MongoDB默认的数据库。
创建自己数据库
在MongoDB中创建数据库,只有我们在数据库中插入数据后,数据库才会真正的创建.
MongoDB的用户权限和数据库是绑定的。也就是创建一个新的数据库,并在数据库中插入数据的正确操作应该是创建与之对应的用户:
#正确操作流程
use admin
db.auth('niufaandaidan','20190706')
db.createUser(
{
user:'niufa',
pwd:'20190706',
roles:[{
role:'readWrite',
db:'recommended'}]
})
db.auth('niufa','20190706')
use recommended
db.repo.insert({'name':'kevin'})
请注意以下几点:
- 数据库和用户是绑定的,光创建一个超级用户并不能操作在其他新建的数据库中插入数据
- 在切换数据库时,先切换认证用户,不然会出现too many users are authenticated的错误
此错误是因为没有授权给admin用户对system.version表执行命令的权限,解决方法如下:
db.grantRolesToUser("root", [{role: "__system", db: "admin"}])
给超级用户赋予上面的操作,这样root用户就能执行高级功能,例如删除数据库。
MongoDB基本角色
- 数据库用户角色:read、readWrite;
- 数据库管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 备份恢复角色:backup、restore;
- 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超级用户角色:root
MongoDB基本命令行操作
详情请见:https://www.cnblogs.com/zhuawang/p/3965272.html