Skip to content
On this page

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 术语比较:

MongoDBMySQL
数据库数据库
集合
文档数据行

数据库操作

当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")

参考链接