- 开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
什么是MongoDB
MongoDB 是由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统。
MongoDB的主要特点
- MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
- 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
- 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
- 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
- Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
- MongoDB安装简单。
使用Docker 安装 Mongo
- 拉取镜像
docker pull mongo #拉取最新latest
docker pull mongo:5.0 #指定拉取镜像的版本
- 创建数据持久化目录
防止容器删除数据丢失
mkdir -p /docker_volume/mongo/data
- 运行容器
docker run -itd --name mongodb -v /docker_volume/mongo/data:/data/db -p 27017:27017 mongo --auth
运行容器名称为 mongodb -v为持久化卷 -p为映射端口 --auth为开启授权验证,由于mongodb 默认没有用户,我们需要进入容器创建用户。
- 进入容器
docker exec -it [容器名/容器id] /bin/bash
- 查询、切换命令
show dbs #查询所有的数据库
show tables #查询数据库下面有哪些表
use admin #切换到指定的数据库
- 创建用户
db.createUser
({
user:'test', //用户名
pwd:'Admin123456!@#', //密码
roles:[
{
role:'read', //角色
db: 'admin' //授权的DB
}]
})
- 删除用户,需要特定角色
db.system.users.remove({user:"test"})
-
用户相关角色
- Read:允许用户读取指定数据库
- readWrite:允许用户读写指定数据库
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
- root:只在admin数据库中可用。超级账号,超级权限
-
连接MongoDB
db.auth('test', 'Admin123456!@#')
- 基础操作命令
db.test.insert({"name": "zzs","age":108}) #插入一条数据
db.test.insert([{"name": "zzs","age":108},{"name": "qqb","age":66}]);//批量插入
db.test.find(); #查询第一条数据
db.test.find({"name":"zzs"}) #添加查询条件
db.test.remove({"name":"zzs"}); #删除