简介
- 介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的
- 语法有点类似javascript面向对象的查询语言
- 它是一个面向集合的,模式自由的文档型数据库
- 实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引
- 它的特点是高性能、易部署、易使用,存储数据非常方便
使用场景
- 数据仓库
- 不支持连表查询,不支持sql语句,不支持事务存储过程等
- 所以不适合存储数据间关系比较复杂的数据,一般主要是当做一个数据仓库来使用
下载安装
-
windows下可执行文件安装
我这里选择mongodb-win32-x86_64-2012plus-4.2.0-signed.msi版本
下载后默认下一步下一步即可
安装过程中会默认勾选install mongoDB compass(可视化工具), 选的话安装会比较耗时
安装成功后, 会自动添加到系统服务里面
mongodb系统服务
└─4.2
├─bin
│ bsondump.exe
│ InstallCompass.ps1
│ mongo.exe # 客户端连接命令
│ mongod.cfg # 配置文件
│ mongod.exe
│ mongod.pdb # 服务端启动命令
│ mongodump.exe
│ mongoexport.exe # 数据导出命令
│ mongofiles.exe
│ mongoimport.exe # 数据导入命令
│ mongorestore.exe
│ mongos.exe
│ mongos.pdb
│ mongostat.exe
│ mongotop.exe
├─data # 数据库路径
└─log # 日志路径
- windows下源码安装
- 解压源码包
- 在bin文件夹同级目录下新建data和log.log
- 启动mongod --dbpath data路径 --logpath log.log路径
- 测试
访问: http://127.0.0.1:27017/
It looks like you are trying to access MongoDB over HTTP on the native driver port.
连接mongodb
- 方式1: mongodb的使用方式是客户端服务器模式
#连接命令
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][? options]]
#参数
mongodb:// 固定前缀
username:账号,可不填
password:密码,可不填
host:主机名或ip地址,只有host主机名为必填项
port:端口,可不填,默认27017
/database:连接某一个数据库
?options:连接参数,key/value对
#示例
mongodb://localhost #连接本地数据库27017端口
mongodb://root:123456@localhost #使用用户名root密码为123456连接本地数据库27017端口
mongodb://localhost,localhost:27018,localhost:27019,连接三台主从服务器,端口为27017、27018、27019
- 方式2: 使用mongodb自带的javascript shell(mongo.exe)连接
C:\Program Files\MongoDB\Server\4.2\bin>mongo.exe
MongoDB shell version v4.2.0
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("51c1aa98-1cad-4013-8281-99f2cb6a575b") }
MongoDB server version: 4.2.0
Server has startup warnings:
2019-09-25T09:02:13.690+0800 I CONTROL [initandlisten]
2019-09-25T09:02:13.690+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-09-25T09:02:13.690+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2019-09-25T09:02:13.690+0800 I CONTROL [initandlisten]
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
连接上之后就可以直接操作mongodb数据库了
-
adminMongo(可视化)
adminMongo -
studio3T(可视化)
官网下载地址
基本概念
- 一个mongodb可以创建多个数据库
- 一个数据库可以创建多个集合
- 一个集合可以包含多个文档
- 与数据库概念对比
sql | mongodb | 描述 |
---|---|---|
database | database | 数据库 |
table | collection | 表/集合 |
row | document | 行/文档 |
column | field | 字段/域 |
index | index | 索引 |
table joins | 表lianjie /mongodb不支持 | |
primary key | primary key | 主键/mongodb自动在每个集合中添加_id的主键 |
数据类型
null
用于表示空值或者不存在的字段,{“x”:null}
布尔值
布尔类型有两个值true和false,{“x”:true}
数值
shell默认使用64为浮点型数值。{“x”:3.14}或{“x”:3}。对于整型值,可以使用
NumberInt和NumberLong
NumberInt(4字节符号整数)或NumberLong(8字节符号整数),{“x”:NumberInt(“3”)}{“x”:NumberLong(“3”)}
字符串
UTF-8字符串都可以表示为字符串类型的数据,{“x”:“呵呵”}
日期
日期被存储为自新纪元依赖经过的毫秒数,不存储时区,{“x”:new Date()}
正则表达式
查询时,使用正则表达式作为限定条件,语法与JavaScript的同,{“x”:/[abc]/}
数组
数据列表或数据集可以表示为数组,{“x”: [“a“,“b”,”c”]}
内嵌文档
文档可以嵌套其他文档,被嵌套的文档作为值来处理,{“x”:{“y”:3 }}
对象Id
对象id是一个12字节的字符串,是文档的唯一标识,{“x”: objectId() }
二进制数据
二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非utf-字符保存到数据库中,二进制数据是唯一的方式。
代码
查询和文档中可以包括任何JavaScript代码,{“x”:function(){/…/}}
文档、集合和数据库
- 文档
文档是mongodb中数据的基本单位, 类似于关系型数据库的行
文档是由键值对组成
1.区分大小写
2.区分数据类型
3.每个文档最大16M
4.每个文档都有一个_id字段,并且同一集合中的_id值唯一,该字段可以是任意类型的数据,默认是一个ObjectId对象, ObjectId对象数据组成:时间戳|机器码|PID|计数器, _id的键值我们可以自己输入,但是不能重复, 重复会报错
5.可以使用js代码来完成批量插入文档
{“name”:"sn", "age":10}
{“Name”:"sn", "age":10}
{“name”:"sn", "age":"10"}
增
db.集合名.insert({}) # 向集合中添加文档
删
db.集合名.remove({条件})(不写条件删除所有的文档)
db.user.remove({age:5})
查
db.集合名.find() # 查询集合所有文档
db.集合名.findOne() # 查询集合第一条文档
- 集合
多个文档组成一个集合,类似于mysql中的表
MongoDB中的集合不用创建、没有结构,所以可以放不同格式的文档
show tables # 查看集合
db.集合名.drop() # 删除集合
- 数据库
多个集合组成一个数据库, 无需创建
创建数据库
use 数据库名称 : 创建数据库, 不存在则创建, 存在则切换, 如果创建了数据库,没有任何的操作,则会自动删除该数据库
查看数据库
show dbs
删除数据库
db.dropDatabase()
帮助
db.help()
db.集合名.help()
用户管理
在mongodb里面的用户是属于数据库的,每个数据库有自己的管理员,管理员登录后,只能操作所属的数据库。
注意:一般在admin数据库中创建的用户授予超级管理员权限,登录后可以操作任何的数据库。
- 创建超级管理员
> use admin
switched to db admin
> db.createUser({ user:'root', pwd:'123456', roles:[{role:'root',db:'admin'}] })
Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
内置角色:
1.数据库用户角色: read, readWrite
2.数据库管理角色: dbAdmin, dbOwner, userAdmin
3.集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4.备份恢复角色:backup、restore;
5.所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase
6.超级用户角色:root
- 查询用户
show users
- 删除用户
db.dropUser("用户名")
- 修改用户
db.updateUser("root",{roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
- 修改密码
db.changeUserPassword("username","newPasswd")
网友评论