MongDB 学习笔记(一)

166 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

概览

是什么

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用户权限

内建的角色

  1. 数据库用户角色:read、readWrite;

  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;

  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

  4. 备份恢复角色:backup、restore;

  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

  6. 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)

  7. 内部角色:__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个字节的自增计数器值