[ mongodb使用 ]


  1. 分布式文件存储的开源数据库
  2. 非关系型 , 可拓展性(bson), 可拓展型, 搞性能, 高可用(多节点)
  3. 是一个NoSql数据库
SQL术语/概念 MogoDb术语/概念 解释/说明
database database 数据库
table collection 数据库表
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,mongodb不支持
primary key primary key 主键, mongodb自动将_id字段设置为主键

MongoDB内置用户说明

  1. 数据库用户角色: read, readWrite;
  2. 数据库管理角色: dbAdmin, dbOwner, userAdmin
  3. 集群管理角色: clusterAdmin, clusterManager, clusterMonitor, hostManager;
  4. 备份恢复角色: backup, restore;
  5. 所有数据库角色: readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase, dbAdminAnyDatabase
  6. 超级用户角色: root
  7. 内部角色: __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
image.png

image.png

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')