Appearance
MongoDB Basic
基础命令
> help		# 获取帮助
> db.version()
4.4.1
> db		# 获取当前数据库
test
# 或者使用
> db.getName()
test
> show dbs		# 查询所有数据库
admin   0.000GB
config  0.000GB
local   0.000GB
> db.stats()		# 获取当前库状态
        "db" : "test",
        "collections" : 0,
        "views" : 0,
        "objects" : 0,
        "avgObjSize" : 0,
        "dataSize" : 0,
        "storageSize" : 0,
        "totalSize" : 0,
        "indexes" : 0,
        "indexSize" : 0,
        "scaleFactor" : 1,
        "fileSize" : 0,
        "fsUsedSize" : 0,
        "fsTotalSize" : 0,
        "ok" : 1
}
> db.getMongo()		# 获取当前连接信息
connection to 127.0.0.1:27017
> help		# 获取帮助
> db.version()
4.4.1
> db		# 获取当前数据库
test
# 或者使用
> db.getName()
test
> show dbs		# 查询所有数据库
admin   0.000GB
config  0.000GB
local   0.000GB
> db.stats()		# 获取当前库状态
        "db" : "test",
        "collections" : 0,
        "views" : 0,
        "objects" : 0,
        "avgObjSize" : 0,
        "dataSize" : 0,
        "storageSize" : 0,
        "totalSize" : 0,
        "indexes" : 0,
        "indexSize" : 0,
        "scaleFactor" : 1,
        "fileSize" : 0,
        "fsUsedSize" : 0,
        "fsTotalSize" : 0,
        "ok" : 1
}
> db.getMongo()		# 获取当前连接信息
connection to 127.0.0.1:27017
对象操作
MongoDB 与 MySQL 术语比较:
| MongoDB | MySQL | 
|---|---|
| 数据库 | 数据库 | 
| 集合 | 表 | 
| 文档 | 数据行 | 
数据库操作
当use的时候,系统就会自动创建一个数据库。
> use test
switched to db test
> db.dropDatabase()
{ "ok" : 1 }
> use test
switched to db test
> db.dropDatabase()
{ "ok" : 1 }
集合操作(CURD)
手动创建集合:
> use test
switched to db test
# 插入单条数据
> db.createCollection('a')
{ "ok" : 1 }
> db.createCollection('b')
{ "ok" : 1 }
> db.createCollection('c')
{ "ok" : 1 }
# 查看所有集合
> show collections
a
b
c
# 或者
> db.getCollectionNames()
[ "a", "b", "c" ]
# 或者
> show tables
> use test
switched to db test
# 插入单条数据
> db.createCollection('a')
{ "ok" : 1 }
> db.createCollection('b')
{ "ok" : 1 }
> db.createCollection('c')
{ "ok" : 1 }
# 查看所有集合
> show collections
a
b
c
# 或者
> db.getCollectionNames()
[ "a", "b", "c" ]
# 或者
> show tables
增
创建文档时自动创建集合:
# 插入一条文档
> db.inventory.insertOne(
   { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)
# 或者使用 db.inventory.insert 命令有相同效果
# 插入多条文档
> db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
# 此时会发现已经自动创建了一个集合
> show collections
inventory
# 查看文档内容
# > db.inventory.find( { item: "canvas" } )
> db.inventory.find({}).pretty()
        "_id" : ObjectId("5fa13a9a42526db8b4cd7002"),
        "item" : "canvas",
        "qty" : 100,
        "tags" : [
                "cotton"
        ],
        "size" : {
                "h" : 28,
                "w" : 35.5,
                "uom" : "cm"
        }
}
# 插入一条文档
> db.inventory.insertOne(
   { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
)
# 或者使用 db.inventory.insert 命令有相同效果
# 插入多条文档
> db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
])
# 此时会发现已经自动创建了一个集合
> show collections
inventory
# 查看文档内容
# > db.inventory.find( { item: "canvas" } )
> db.inventory.find({}).pretty()
        "_id" : ObjectId("5fa13a9a42526db8b4cd7002"),
        "item" : "canvas",
        "qty" : 100,
        "tags" : [
                "cotton"
        ],
        "size" : {
                "h" : 28,
                "w" : 35.5,
                "uom" : "cm"
        }
}
使用函数批量插入:
> for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":newDate()})}
> for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":newDate()})}
删
删除集合或者集合内容:
> db.inventory.drop()
true
# 删除集合内所有文档
> db.log.remove({})
> db.inventory.drop()
true
# 删除集合内所有文档
> db.log.remove({})
改
重命名集合:
> db.c.renameCollection("RENAMED_c")
{ "ok" : 1 }
> show tables
RENAMED_c
# 根据条件进行批量修改,默认情况下monggoDB只会修改一条document,如果要修改多条document,则需要设置multi为true.
> db.getCollection("doc").update({ctime:{$lt: "2022-05-09"}},{$set:{status:-1}},{multi:true});
> db.c.renameCollection("RENAMED_c")
{ "ok" : 1 }
> show tables
RENAMED_c
# 根据条件进行批量修改,默认情况下monggoDB只会修改一条document,如果要修改多条document,则需要设置multi为true.
> db.getCollection("doc").update({ctime:{$lt: "2022-05-09"}},{$set:{status:-1}},{multi:true});
查
> > db.getCollection("doc").find({}).pretty()
> > db.getCollection("doc").find({}).pretty()
查看文档:
# 查看所有指定集合所有文档
> db.log.find().pretty() 		# 等同于db.log.find({})
* 注意: 默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。
# 设置每页显示数据的大小:
> DBQuery.shellBatchSize=50; 
# 查看第一条文档
> db.log.findOne()
# 查看总文档数
> db.log.count()
> db.log.stats()
> db.log.dataSize() # 集合中数据的原始大小
> db.log.totalIndexSize() # 集合中索引数据的原始大小
> db.log.totalSize() # 集合中索引+数据压缩存储之后的大小
> db.log.storageSize() # 集合中数据压缩存储的大小
# 查看所有指定集合所有文档
> db.log.find().pretty() 		# 等同于db.log.find({})
* 注意: 默认每页显示20条记录,当显示不下的的情况下,可以用it迭代命令查询下一页数据。
# 设置每页显示数据的大小:
> DBQuery.shellBatchSize=50; 
# 查看第一条文档
> db.log.findOne()
# 查看总文档数
> db.log.count()
> db.log.stats()
> db.log.dataSize() # 集合中数据的原始大小
> db.log.totalIndexSize() # 集合中索引数据的原始大小
> db.log.totalSize() # 集合中索引+数据压缩存储之后的大小
> db.log.storageSize() # 集合中数据压缩存储的大小
用户管理
语法:
{
    user: "<name>",
    pwd: "<cleartext password>",
    customData: { <any information> },
    roles: [
       { role: "<role>",
     db: "<database>" } | "<role>",
    ...
    ]
}
{
    user: "<name>",
    pwd: "<cleartext password>",
    customData: { <any information> },
    roles: [
       { role: "<role>",
     db: "<database>" } | "<role>",
    ...
    ]
}
1、在创建普通用户时,一般事先use 到想要设置权限的库下;或者所有普通用户使用同一个验证库,比如test 2、root角色的创建,要在admin下进行创建 3、创建用户时你use到的库,在将来登录时候,使用以下方式登录,否则是登录不了的 mongo -u oldboy -p 123 10.0.0.53/oldboy
(1) 创建超级管理员, 管理所有数据
> use admin
> db.createUser(
{
    user: "root",
    pwd: "root",
    roles: [ { role: "root", db: "admin" } ]
}
)
# 验证用户
> db.auth('root', 'root')
1
> use admin
> db.createUser(
{
    user: "root",
    pwd: "root",
    roles: [ { role: "root", db: "admin" } ]
}
)
# 验证用户
> db.auth('root', 'root')
1
在配置文件中启用用户验证:
# vim /etc/mongodb.conf , 加入以下内容
security:
  authorization: enabled
# vim /etc/mongodb.conf , 加入以下内容
security:
  authorization: enabled
重启 mongodb...
登录验证:
$ mongo -uroot -proot localhost/admin
# 或者
$ mongo
> use admin
> db.auth('root','root')
$ mongo -uroot -proot localhost/admin
# 或者
$ mongo
> use admin
> db.auth('root','root')
(2) 创建库管理员
> use users
# 对app1数据库有读写权限, 对app2数据库仅有读权限, 对app3具有管理员权限
> db.createUser(
{
user: "suofeiya",
pwd: "suofeiya",
roles: [ { role: "readWrite", db: "app1" },
       { role: "read", db: "app2" },
       { role: "dbAdmin", db: "app3" },
      ]
   }
)
> use users
# 对app1数据库有读写权限, 对app2数据库仅有读权限, 对app3具有管理员权限
> db.createUser(
{
user: "suofeiya",
pwd: "suofeiya",
roles: [ { role: "readWrite", db: "app1" },
       { role: "read", db: "app2" },
       { role: "dbAdmin", db: "app3" },
      ]
   }
)
查询所有用户:
> db.system.users.find().pretty()
> db.system.users.find().pretty()
删除某个用户:
> use users
> db.dropUser("suofeiya")
> use users
> db.dropUser("suofeiya")
参考链接
- MongoDB Tutorial:https://www.tutorialspoint.com/mongodb/index.htm
 - MongoDB Database Command: https://docs.mongodb.com/manual/reference/command/
 - MongoDB CRUD: https://docs.mongodb.com/manual/crud/
 - MongoDB 菜鸟教程: https://www.runoob.com/mongodb/
 - https://blog.csdn.net/weixin_44953658/article/details/122102059?spm=1001.2014.3001.5501
 
VitePress