小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
概览
是什么
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
特性
面向集合存储
动态查询
查询监视
赋值和高效的故障转移
自动分片以支持云级别的伸缩性
应用场景
需要进行地理编码、经纬度计算的应用数据存储,如快递行业
业务需求多变,数据表结构经常发生变化,快速进行迭代开发的系统
大量日志、缓存存储
不常使用join查询
安装:
docker 安装
准备工作:开放27017端口
1.dokcer 拉镜像
docker pull mongo
2.启动镜像
docker run
--name mongodb-4.0
-v /data/mongodb/db:/data/db
-p 27017:27017
-d [镜像id]
--auth
3.进入容器并且配置
docker exec -it mongodb-4.0 mongo admin
4.配置用户名、密码
db.createUser({
user : "root",
pwd : "mongodb",
roles : [{role : "root","db" : "admin"}]
});
-详情可见mongodb 用户权限
MongoDB用户权限
内建的角色
-
数据库用户角色:read、readWrite;
-
数据库管理角色:dbAdmin、dbOwner、userAdmin;
-
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
-
备份恢复角色:backup、restore;
-
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
-
超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
-
内部角色:__system
具体说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
设置为系统服务
1.在server同级目录创建data文件夹
2.在data文件中创建db、log俩个文件夹
3.在log文件中创建mongod.log文件
4.在mongodb目录下的bin创建同级的文件mongod.cfg
写入
systemLog:
destination: file
path: D:\nosql\mongdb\data\log\mongod.log
storage:
dbPath: D:\nosql\mongdb\data\db
5.cmd以管理员方式运行
sc.exe create MongoDB binPath= "\"D:\nosql\mongdb\Server\3.4\bin\mongod.exe\" --service --config=\"D:\nosql\mongdb\Server\3.4\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"
基本概念
数据库:数据集合的容器(和mysql数据库差不多)
集合:数据文档的存放体(类似于数据表)
文档:数据实体(类似于数据表的行数据)
ObjectId生成规则
是一个12个字节的16位进制字符串,总共就是24位的字符串
3.4版本之前
a 4-byte value representing the seconds since the Unix epoch,
4个字节的Unix时戳
a 3-byte machine identifier,
3个字节的机器码唯一标识
a 2-byte process id, and
2个字节的进程id
a 3-byte counter, starting with a random value.
3个字节的自增计数器值,保证在同一秒同一个机器同一个进程产生不一样的数字
3.4版本即以后
a 4-byte value representing the seconds since the Unix epoch,
4个字节的Unix时戳
a 5-byte random value, and
5个字节的随机数
a 3-byte counter, starting with a random value.
3个字节的自增计数器值