MongoDB手册
1. 用户管理
角色 | 描述 | 数据库 |
---|---|---|
read | 数据库读取权限 | * |
readWrite | 数据库读写权限 | * |
dbAdmin | 执行管理函数权限 | * |
userAdmin | 执行用户管理权限 | * |
clusterAdmin | 所有分片和复制集相关函数的管理权限 | admin |
readAnyDatabase | 所有数据库的读取权限 | admin |
readWriteAnyDatabase | 所有数据库的读写权限 | admin |
userAdminAnyDatabase | 所有数据库的userAdmin权限 | admin |
dbAdminAnyDatabase | 所有数据库的dbAdmin权限 | admin |
root | 超级权限 | admin |
# 创建用户
db.createUser({user: "root", pwd: "root", roles:[{role:"root", db:"admin"}]})
# 查询用户
db.system.users.find()
开启数据库安全认证
security: authorization: enabled
# 认证用户
db.auth("root", "root")
# 更新用户
db.updateUser("root", {pwd: "123456"})
# 更改用户密码
db.changeUserPassword("root", "123456")
# 删除用户
db.dropUser("root")
2. 数据库管理
# 创建/切换数据库
use test
# 查询所有数据库
show databases
# 删除数据库(需要先切换到要删除的数据库)
db.dropDatabase()
3. 集合管理
# 创建集合
db.createCollection("col1")
# 查看集合
show collections/tables
# 删除集合
db.col1.drop()
4. 文档管理
# 创建文档
db.col1.insertMany([
{"name": "test", "value": "test"},
{"name": "test", "value": "test"
])
# 新增单个文档
db.col1.insertOne({"name": "test", "value": "test"})
save()
和insert()
都可用于创建文档,save()
还可用于更新文档
集合
col1
文档内容{ "_id" : ObjectId("603eef2fd702dd13f81d99de"), "name" : "calong", "age" : 19, "sex" : "M" } { "_id" : ObjectId("603eef3ed702dd13f81d99df"), "name" : "sarach", "age" : 18, "sex" : "W" } { "_id" : ObjectId("60404c486c5e206a4273fc9c"), "name" : "keras", "age" : 21, "sex" : "M" } { "_id" : ObjectId("60404c576c5e206a4273fc9d"), "name" : "Jiawen", "age" : 22, "sex" : "M" }
条件操作符 | 含义 | 语法 |
---|---|---|
$gt/$gte | 大于/大于等于 | {键:{$gt/$gte:值}} |
$lt/$lte | 小于/小于等于 | {键:{$lt/$lte:值}} |
$eq/$ne | 等于/不等于 | {键:{$eq/$ne:值}} |
$and | 且连接 | {$and:[{条件}, {条件}]} |
$or | 或连接 | {$or:[{条件}, {条件}]} |
$in/$nin | 包含 | {键:{$in/$nin:[值, 值]}} |
$type | 类型判断符 | {键:{$type:值}} |
# 查询所有文档
db.col1.find()
# 按条件查询
db.col1.find({name: "calong"})
# 查询指定属性
db.col1.find({}, {_id: 0, name:1, age:1})
# 查询符合条件的指定属性
db.col1.find({name: "calong"}, {_id:0, name:1, age:1})
# 正则查询
db.col1.find({name: /^Jia/})
# 条件操作符
db.col1.find({age:{$gt:20}})
# 覆盖文档
db.col1.update({name: "calong"}, {name: "calong", age: 21, sex: "M"})
# 更新指定属性(没有则创建)
db.col1.update({name: "calong"}, {$set:{grade: 97}})
# $inc操作符
db.col1.update({name: "calong"}, {$inc:{grade: 1}})
# 删除文档指定属性
db.col1.update({name: "calong"}, {$unset:{grade: 1}})
# 数组操作
# 向数组中添加值(没有则创建)
db.col1.update({name: "calong"}, {$push:{class:"Java"}})
# 从数组尾部(1)或头部(-1)删除一个值
db.col1.update({name: "calong"}, {$pop:{class:1}})
# 从数组中删除指定的单个值
db.col1.update({name: "calong"}, {$pull:{class:"Java"}})
# 从数组中删除指定的多个值
db.col1.update({name: "calong"}, {$pullAll:{class:["Java"]}})
# 重命名属性
db.col1.update({name: "calong"}, {$rename:{class:"subject"}})
# 从符合条件的文档中删除一个
db.col1.deleteOne({name: "Jiawen"})
# 删除所有符合条件的文档
db.col1.deleteMany({name: "Jiawen"})
remove()
也可以用于删除文档
# 分页查询(skip表示跳过几个, limit表示查询几个)
db.col1.find().limit(2).skip(1)
# 排序查询(1表示升序, -1表示降序)
db.col1.find().sort({name:1})
5. 聚合函数
# group表示分组(_id的值表示分组字段)
# 求总条数
db.col1.aggregate([{$group: {_id: null, count: {$sum: 1}}}])
# 求和
db.col1.aggregate([{$group: {_id: null, sum: {$sum: "$age"}}}])
# 筛选(match在group之前表示分组前筛选, 在group之后表示分组时候筛选)
db.col1.aggregate([{$match: {name: /a/}}, {$group: {_id: null, sum: {$sum: "$age"}}}])
db.col1.aggregate([{$group: {_id: null, sum: {$sum: "$age"}}}, {$match: {name: /a/}}])
# 最大值
db.col1.aggregate([{$group: {_id: null, max: {$max: "$age"}}}])
# 最小值
db.col1.aggregate([{$group: {_id: null, min: {$min: "$age"}}}])
# 平均值
db.col1.aggregate([{$group: {_id: null, avg: {$avg: "$age"}}}])
# 分组并返回分组统计的数据
db.col1.aggregate([{$group: {_id: "$age", count: {$sum: 1}, names: {$push: "$name"}}}])
当前数据
{ "_id" : ObjectId("603eef2fd702dd13f81d99de"), "name" : "calong", "age" : 21, "sex" : "M", "subject" : [ "Python", "Golang" ] } { "_id" : ObjectId("603eef3ed702dd13f81d99df"), "name" : "sarach", "age" : 18, "sex" : "W", "subject" : [ "Golang", "C++" ] } { "_id" : ObjectId("60404c486c5e206a4273fc9c"), "name" : "keras", "age" : 21, "sex" : "M", "subject" : [ "JavaScript", "Rust" ] }
# 数组字段拆分
db.col1.aggregate({$unwind: "$subject"})
6. 索引管理
参数 | 含义 | 值 |
---|---|---|
background | 后台运行创建过程 | true/false |
unique | 是否为唯一索引(唯一索引的字段不能包含重复的值) | true/false |
name | 索引名称 | “index_name” |
sparse | 只对文档中存在的字段启用索引(稀疏索引) | true/false |
expireAfterSeconds | 集合的生存时间TTL | 100 |
partialFilterExpression | 部分索引 | {partialFilterExpression:{条件:{字段:值}}} |
# 创建索引(1表示升序, -1表示降序)
db.col1.createIndex({name: 1}, {background: true})
# 查看索引
db.col1.getIndexes()
# 查看创建索引的键
db.col1.getIndexKeys()
# 查看索引大小(不加参数表示显示总大小)
db.col1.totalIndexSize([1])
# 删除指定索引
db.col1.dropIndex("name_1")
# 删除所有索引(除主键之外)
db.col1.dropIndexes()
# 重建索引
db.col1.reIndex()
索引类型包括:
单字段索引
交叉索引
: 为一个集合的多个字段分别建立索引(多个单字段索引)复合索引
: 对多个字段联合创建索引多KEY索引
: 数组类型的索引
# 查询执行计划
db.col1.find().explain()
本作品采用《CC 协议》,转载必须注明作者和本文链接