MongoDB 基本使用

一、数据库操作

  • 连接数据库

mongo --host 192.168.0.21 --port 27017
  • 查看数据库

show dbs
  • 创建库

use test_db
# 库存在就切换到该库,不存在就创建。刚创建的数据库不显示在 show dbs 列表中,如要显示需插入数据。
db.test_col.insert({name: "aaa"})
show dbs
  • 查看当前所在数据库

db
  • 删除库

db.dropDatabase()

 

二、文档操作
  • 插入文档

db.test_doc.insert({name: "zhangsan", age: 18, job: "Student"})

# 3.2 版本之后引入的新方法
db.test_doc.insertOne({name: "zhangsan", age: 18, job: "Student"})
db.test_doc.insertMany([{name: "zhangsan", age: 18, job: "Student"}, [{name: "wangwu", age: 19, job: "Teacher"}])
  • 查询文档

# 查看集合
show collections

# 查询所有文档
db.test_doc.find({})

# 查询 name 是 zhangsan 的文档
db.test_doc.find({name: "zhangsan"})
  • 更新文档

db.test_doc.update({name: "zhangsan"}, {$set: {name: "wangwu"}})

db.test_doc.find().pretty()

# 通过 save 方法替换已存在的文档
db.test_doc.save({"_id":ObjectId("5ff475f26f2a2d9739aad1a3"), name: "lisi", age: 19, job: "IT"})
db.test_doc.insert({name: "a1", count: 2})
db.test_doc.insert({name: "b1", count: 3})
db.test_doc.insert({name: "c1", count: 10})
db.test_doc.insert({name: "d1", count: 20})
db.test_doc.insert({name: "e1", count: 30})

# 只更新满足条件的第一条
db.test_doc.update({count: {$gt: 10}}, {$set: {"name": "big_d1"}}, false, false)

# 更新满足条件的所有的
db.test_doc.update({count: {$gt: 5}}, {$set: {"res": "big_big"}}, false, true)

# 只添加第一条
db.test_doc.update({count:{$gt: 5}}, {$set: {"hello": "wow"}}, true, false)

# 全部添加进去
db.test_doc.update({count:{$gt: 5}}, {$set: {"status": "ok"}}, true, true)

# 3.2 版本之后引入的新方法
db.test_doc.updateOne({count: {$gt: 5}}, {$set: {"res": "big_big"}})
db.test_doc.updateMany({count: {$gt: 5}}, {$set: {"res": "big_big"}})
db.test_doc.replaceOne({count: {$gt: 5}}, {$set: {"res": "big_big"}})
  • 删除文档

# 删除满足条件的第一条
db.test_doc.remove({count: {$gt: 5}}, 1)

# 删除所有
db.test_doc.remove({})

# 3.2 版本之后引入的新方法
db.test_doc.deleteOne({})
db.test_doc.deleteMany({})

 

三、用户管理
为了安全起见 mongodb 配置文件中加入 auth = true 以开启权限认证

yaml版本的配置

security:
  authorization: enabled

 

# 为 test_db 库创建一个可读写的用户
use test_db
db.createUser({user: "test_user", pwd: "123456", roles: [{role: "readWrite", db: "test_db"}]})
show users

db.changeUserPassword("test_user", "112233")

# 带用户名密码连接 mongo
mongo --host 192.168.0.21 --port 27017 -u test_user -p 112233 --authenticationDatabase test_db
MongoDB 内置角色有如下:
  • 数据库用户角色:read、readWrite

  • 数据库管理角色:dbAdmin、dbOwner、userAdmin

  • 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager

  • 备份恢复角色:backup、restore

  • 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

  • 超级用户角色:root — 这里还有几个角色间接或直接提供了系统超级用户的访问 (dbOwner 、userAdmin、userAdminAnyDatabase)

  • 内部角色:__system

 

四、mongodb 备份还原 / 导出导入


1. 备份整个库
mongodump -h 127.0.0.1:27017 -u root -p 'password' --authenticationDatabase admin -d dbName -o /data/backup/
2. 还原整个库
mongorestore -h 127.0.0.1:27017 -u root -p 'password' --authenticationDatabase admin -d dbName --dir /data/backup/
# 可以加上 --drop 参数, 意思是恢复前先删除当前数据(谨慎使用)
3. 导出一个 collection
mongoexport -h 127.0.0.1:27017 -u root -p 'password' --authenticationDatabase admin -d dbName -c collectionName -o /data/backup/collectionName.json --type json

# 也可以导出 csv 格式的数据。--type csv, -f 指定导出数据的字段
mongoexport -h 127.0.0.1:27017 -u root -p 'password' --authenticationDatabase admin -d dbName -c collectionName -o /data/backup/collectionName.csv --type csv -f "_id,user_id,user_name,age,status"
4. 导入一个 collection
mongoimport -h 127.0.0.1:27017 -u root -p 'password' --authenticationDatabase admin -d dbName -c collectionName --file /data/backup/collectionName.json

 

以上就是 MongoDB 的基本使用。更多内容还是参考官方文档://docs.mongodb.com/manual/crud/

 

Tags: