- 分布式文件存储的开源数据库
- 非关系型 , 可拓展性(bson), 可拓展型, 搞性能, 高可用(多节点)
- 是一个NoSql数据库
| SQL术语/概念 |
MogoDb术语/概念 |
解释/说明 |
| database |
database |
数据库 |
| table |
collection |
数据库表 |
| row |
document |
数据记录行/文档 |
| column |
field |
数据字段/域 |
| index |
index |
索引 |
| table joins |
|
表连接,mongodb不支持 |
| primary key |
primary key |
主键, mongodb自动将_id字段设置为主键 |
MongoDB内置用户说明
- 数据库用户角色: read, readWrite;
- 数据库管理角色: dbAdmin, dbOwner, userAdmin
- 集群管理角色: clusterAdmin, clusterManager, clusterMonitor, hostManager;
- 备份恢复角色: backup, restore;
- 所有数据库角色: readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase, dbAdminAnyDatabase
- 超级用户角色: root
- 内部角色: __system
1. 安装
1.docker安装
docker search mongodb
docker pull mongo
docker run --name mongodb -v /my-docker-compose/mongodb/data/db/:/data/db -p 27017:27017 -d mongo --auth
045e7fa4bb37d9bd7f6cd213104657eee10864d1a0cccf7b743d624d1b002f45
docker exec -it 045e /bin/bash
mongo # 版本6以后使用: mongosh
use admin
db.createUser({user:'test', pwd:'123456', roles:[{role:'root',db:'admin'}]});
1.vscode配置----插件mongodb


mongodb://test:123456@192.168.50.225
2. Mongodb基本命令
1.登录权限
// 方式一
mongo
use admin
db.auth('admin', 'Abc123++')
// 方式二
mongo admin -u admin -p Abc123++
--------------为数据库设置独立的登录账号--------------
use myMongoDB // 跳转到需要添加用户的数据库
db.createUser({
user: 'tao', // 用户名
pwd: 'Abc123++', // 密码
roles:[{
role: 'readWrite', // 读写权限角色
db: 'myMongoDB' // 数据库名
}]
})
2.数据库操作
2.1创建数据库配置
备注在mongoDB中不需要创建集合, 在创建文档的时候会自动创建集合
| 字段 |
类型 |
描述 |
| capped |
boolean |
如果为true,启用封顶集合 |
| autoindexID |
bollean |
如果为true,字段创建索引_id |
| size |
number |
指定最大大小字节封顶集合 |
| max |
number |
指定封顶集合运行在文件的最大数量 |
创建命令展示
db.createCollection('pxcoder',{capped:true,autoIndexID:true,size:6142800,max:10000})
2.2基本命令
- mongodb数据库-集合-文档
- mysql数据库-表-字典
# 创建文档=数据库 (没有则自动删除)
use test;
# 删除文档=数据库
db.dropDatabase()
# 创建集合: 相当于表
db.createCollection('StudentList')
# 查询,集合=表
show tables
show collections
# 删除集合
db.StudentList.drop()
-----(文档~=字典)-----
# 创建一个文档
db.StudentList.insertOne({'name':'陈海峰', 'Soucre':'China', 'Age':24 })
# 插入多个文档
db.StudentList.insertMany([{'name':'张三', 'Soucre':'History', 'Age':26 },{'name':'欧子君','Soucre':'History','Age':25}])
# 循环插入 js语句
for (var i=0; i<100; i++) db.StudentList.insert({'name':'zhangxi_' + i, 'Soucre': 'China', 'Age': 10 + i})
# 查询表
db.StudentList.find()
# 删除多个 ^开始
db.StudentList.remove({'name':/^zhangxi_/})
# save(), 有则修改, 没有则保存
db.StudentList.save({'_id':ObjectId("6373f226cc137ff6cf6fdb64"), 'name':'陈海峰变','Soucre' : 'Chinabian'})
# 更新数据update
# set 修改
db.StudentList.update({'name':'陈海峰'}, {$set:{'Subjects':['三十六变','取经']}})
# push 插入末尾
db.StudentList.update({'name':'张三'}, {$push:{'Subjects':['三十六变','取经']}})
# pull 匹配的元素删除
db.StudentList.update({'name':'张三'}, {$pull:{'Subjects':['三十六变','取经']}})
# plp 尾部删除一个
db.StudentList.update({'name':'陈海峰变'}, {$pop:{'Subjects':1}})
# unset 删除字典(域)内一个元素
db.StudentList.update({'name':'陈海峰变'}, {$unset:{'Subjects':1}})
2.3查询
# 查询所有
db.StudentList.find()
# 查询所有友好格式
db.StudentList.find().pretty()
# 条件
db.StudentList.find({'name':'陈海峰变'})
# and条件
db.StudentList.find({'name':'陈海峰$',"Soucre" : "China"})
# or 条件
db.StudentList.find({$or:[{name:'张三'},{name:'欧子君'}]})
# $gt 大于
db.StudentList.find({Age:{$gt:13}})
# $lt 大于
db.StudentList.find({Age:{$lt:13}})
# 大于, 小于 混合使用
db.StudentList.find({Age:{$lte:13,$gte:10}})
# or结合操作符
db.StudentList.find({$or:[{Age:{$gte:14}},{Age:{$lte:10}}]})
1.比较操作符
| 语法mongodb |
操作符, |
解释 |
| db.StudentList.find({Age:{$lt:13}}) |
$lt |
小于 |
| db.StudentList.find({Age:{$gt:13}}) |
$gt |
大于 |
| db.StudentList.find({Age:{$gte:13}}) |
$gte |
大于等于 |
| db.StudentList.find({Age:{$ne:13}}) |
$ne |
不等于 |
| db.StudentList.find({Age:{$eq:13}}) |
$eq |
等于 |
1.1操作符 $type
| 类型 |
数字 |
备注 |
| double |
1 |
包括整形,小数 |
| string |
2 |
|
| object |
3 |
|
| array |
4 |
|
| binary data |
5 |
|
| undefined |
6 |
废弃 |
| object id |
7 |
|
| boolean |
8 |
|
| date |
9 |
|
| null |
10 |
|
| regular expression |
11 |
|
| javascript |
13 |
|
| symbol |
14 |
|
| javascript(with scope) |
15 |
|
| 32-bit integer |
16 |
|
| timestamp |
17 |
|
| 63-bit integer |
18 |
|
| min key |
255 |
query with -1 |
|
|
|
# 年龄是数字的
db.StudentList.find({Age:{$type:1}})
1.2高级操作符
| 命令 |
类型 |
描述 |
|
|
|
| $in |
匹配列表中的某个值 |
|
|
$nin |
不匹配,列表中的所有值 |
|
$exists |
判断域(字段)是否存在 |
|
$regex |
正则表达式like模糊查询 |
# in
db.StudentList.find({Age:{$in:[10,11]}})
# nin
db.StudentList.find({Age:{$nin:[10,11]}})
# exists 存在字段(域)
db.StudentList.find({Subjects:{$exists:1}})
# /xxxx/ ^开始 $结束 js模糊查询
db.StudentList.find({'name':/^陈海峰_/})
# regex 原生模糊查询
db.StudentList.find({'name':{$regex:'陈海峰'}})
1.3投影(select)
| mysql关系型 |
mongodb非关系型 |
| from |
db.tablename |
| where |
db.tablename.find({where}) |
| select |
db.tablename.finf({where}, select) |
# 相当于select,
# 选择需要显示的字段
db.StudentList.find({},{name:1,Soucre:1})
# 使用1 显示, 0 不显示
# 不能同时使用1和0
db.StudentList.find({},{name:0,Soucre:0})
1.4限制记录 Limit/skip
与mysql 中 limit 与 start
# limit 指定需要多少条数据
db.StudentList.find().limit(5)
# skip (跳过)指定从那个位置开始
db.StudentList.find().limit(5).skip(1)
1.5排序sort()
# 1 升序
db.StudentList.find().sort({Age:1})
# -1 降序
db.StudentList.find().sort({Age:-1})
1.6执行顺序
group by
having
select
order by
limit start, length
2.4索引
# 创建索引 1升序 -1 降序确定
> db.StudentList.createIndex({'name':1})
{
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"createdCollectionAutomatically" : false,
"ok" : 1
}
# 查看集合索引
db.StudentList.getIndexes()
# 查询所有大小
db.StudentList.totalIndexSize()
# 删除所有索引集
db.StudentList.dropIndexes()
# 删除指定索引
db.StudentList.dropIndex('name')