1. 程式人生 > 實用技巧 >MongoDB1 mongodb介紹, 啟動和配置, 賬號管理, 資料庫操作curd操作, 集合操作

MongoDB1 mongodb介紹, 啟動和配置, 賬號管理, 資料庫操作curd操作, 集合操作

1 Mongodb介紹

# 1 一個非關係型資料庫(表和表間沒聯絡,不能建外來鍵),文件型資料庫(json儲存的)
## Mongodb可以存特殊的集合型別(一個欄位可以存字典,列表)。mysql是不支援這種格式的,如果要存,只能轉成json格式存到欄位裡。實在沒辦法了,在欄位裡存json格式,加刪資料,把json改下存進去。

# 2 mysql       mongodb
    資料庫       資料庫(database)
      表          集合(collection)
    行          文件(document)
    列          field(欄位)
    索引         索引
    連表         不支援(可以用子查詢(表join不支援,像django orm__連表關聯查詢不支援))
#大型專案一般不建外來鍵關聯,join。這兩種非常異響效能 主鍵 將_id欄位設為主鍵 # 3 文件 就是個字典{"name":"lqz","age":18} ##意味著可以直接傳給前端,不需要用orm,把資料轉成json格式給前端 ## 需要注意的點: #文件中的鍵/值是有序的 #值可以是字串,數字,其他集合型別(列表,字典) #型別區分大小寫 #文件中不能有重複的鍵 #文件中的值可以是多種不同的資料型別,也可以是一個完整的內嵌文件。鍵可以是任意UTF-8字元 # 4 一組文件組成一個集合 -小小的問題(可以組成一個文件) {
"name":"lqz","age":18} {"yyy":"yyy","kkk":90} {"xxx":"xxx"} # 5 多個集合組成一個數據庫 # 6 安裝和啟動 -下載安裝包:https://www.mongodb.com/dr/fastdl.mongodb.org/win32/mongodb-win32-x86_64-2012plus-4.2.6-signed.msi/download -需要下載個客戶端(類似於:Navicat),robo 3T # 7 安裝 # 在linux和mac下,只要把包解壓開就行,不需要安裝 -mongodb-win32-x86_64-2012plus-4.2.6-signed.msi一路下一步,將mogodb設定成服務,注意資料目錄和日誌目錄,mongod compass那個玩意不要裝 #
最好預設裝c盤,經測試裝d盤會報許可權問題,刪服務,用命令建服務 -robo3t-1.3.1-windows-x86_64-7419c406.exe. 一路下一步 ## 在服務中可以把mongodb服務改成手動啟動,開機不用自動啟動 # net start MongoDB # net stop MongoDB

mongodb安裝

robo3t安裝

#### 附上之前自己弄的mongodb3.4.10安裝方法和使用
    # https://blog.csdn.net/baidu_31333625/article/details/73126657       配置
    # 客戶端登入服務,注意,這裡通過localhost登入,如果需要遠端登入,必須先登入認證才行。 
         # mongo --port 27017 
    # django增刪查改
        # https://blog.csdn.net/kuangshp128/article/details/79039366

2 mongodb的啟動和配置

# 1  mongodb的啟動命令
-C:\Program Files\MongoDB\Server\4.2\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\4.2\bin\mongod.cfg" --service    
-mongod.exe --config 配置檔案

-在mongdb的安裝路徑下bin路徑有:mongod.exe(服務端) 和 mongod.cfg(配置檔案)  mongo.exe(客戶端)
    
-在終端到路徑下(或加入環境變數)輸入mongo.exe,可以連線進去
show databases; # 可以檢視所有的資料庫
-一般我們喜歡用圖形化客戶端連線:robo3t
    -create---》輸入地址,埠號--》連線

配置檔案

storage:
  dbPath: C:\Program Files\MongoDB\Server\4.2\data        # 資料路徑
  journal:
    enabled: true

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path:  C:\Program Files\MongoDB\Server\4.2\log\mongod.log        # 日誌檔案路徑

# network interfaces
net:
  port: 27017        # 監聽的埠號
  bindIp: 0.0.0.0    # 繫結的地址0.0.0.0代表遠端可以連線

# 2 可以使用客戶端連線
./mongo --host 10.0.0.5 --port 27017
# 3 可以用圖形化介面的客戶端連線

3 賬號管理

# 1 跟mysql有點區別:mongodb的使用者是建在資料庫下的,但是可以對其他庫有許可權(mysql使用者是單獨存在庫裡,也是user表)
    # ——可以用robo3t,在System下admin庫下Users表中右鍵Add User建立使用者(也可以用下面方法新增)

# 2 操作步驟(全域性有一個db,在哪個庫下,db就是誰)
    -show databases;  # 檢視多有資料庫
  -use admin;      # 使用admin這個庫    # 輸入db可以看當前在哪個庫下
  -db.createUser(    # db的一個方法,在當前庫下建立一個使用者
  {
    user: "root",    # 使用者名稱
    pwd: "123",        # 方法
    roles: [ { role: "root", db: "admin" } ]    # 使用者的許可權,使用者管理的資料庫(對哪個庫操作)
  }
)    # 建立成功後,可以在圖形介面裡開啟Users表看到
    
use test # 空資料庫不顯示
db.createUser(
  {
    user: "lqz",
    pwd: "123",
    roles: [ { role: "readWrite", db: "test" },    # 許可權為讀寫,針對的是test庫
             { role: "read", db: "db1" } ]        # 許可權為只讀,針對的是db1庫
  }
)
# 5 檢視使用者
db.getUser("root")    # 參看名字為root的人
-show users            # 檢視當前庫下的賬戶

#### 瞭解
#3、重啟資料庫
net stop MongoDB
net start MongoDB
#需要以開啟認證的方式啟動mongodb服務
mongod --config "mongod.cfg" --auth

#4、登入:注意使用雙引號而非單引號
#以管理員登陸
./mongo --host 10.0.0.5 --port 27017 -u "root" -p "123" --authenticationDatabase "admin"
# 以使用者lqz登陸(只對test庫有許可權)
./mongo --host 10.0.0.5 --port 27017 -u "lqz" -p "123" --authenticationDatabase "test"
mongo --port 27017 -u "root" -p "123" --authenticationDatabase "admin"

也可以在登入之後用db.auth("賬號","密碼")登入
mongo
show dbs
use admin
# db是一個全域性變數,代表當前所有庫
db.auth("root","123")
show tables;

4 資料庫的curd操作

# 增加
use test   # 有就進去,沒有就建立並進去(如沒有資料,表並沒真正生成) # 輸入db可以看當前是什麼庫
db.t1.insert({"name":"lqz"})  # 庫,集合,文件全都進去了(朝test庫下面的t1表裡插入資料,表會生成)
#注意: db.t1.insert({"yy":"lqz"}) # db.t1.insert({"xx":"lqz"})    ## 欄位完全不一致也可以插入

# 查詢
show databases;
show dbs    # 兩種方法都行

# 刪除
use test #先切換到要刪的庫下
db.dropDatabase() #刪除當前庫

5 集合操作

# 新增
use test
db.table1.insert({"name":"lqz"}) # 有table1就使用,沒有就新增(此處若沒test,也會建立)
db.table2.insert({'b':2})
# 查詢(都可以)
show tables    # 為了和mysql統一語法
show collections
# 刪除
db.table1.drop()