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: