linux環境下,通過mongofiles檔案操作MongoDB:
使用--uri參數可以建立一個短串連,在程式中使用比較方便,不需要做開始的初始化或者結束後的中斷連線。
官方格式為
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
參考地址:Connection String URI Format
其中
1. "mongodb://" : uri的標準開頭
2. "username:password@" : 串連mongodb所使用的使用者名稱和密碼,如果mongodb未開啟使用者認證,則不填也可以操作成功。如果存在使用者名稱/密碼的話,需要用在最後加上分隔字元@
3. "host1" : 遠程登入的主機ip,如果是連自己主機的話,127.0.0.1即可。
4. ":port1" : 要登入的遠程主機連接埠,不填則預設為27017
5. "hostN:portN" : 如果存在多個需要登入的主機ip,則用逗號隔開即可。
6. "database" : 需要操作的mongodb資料庫名稱,如果不填的話,預設為admin資料庫。
7. "options" : 額外參數,具體參數指定請查看上面的參考地址,或者下面例子(3)的使用方式。
舉例:
(1)以使用者名稱為testuser,密碼為testpwd,登入127.0.0.1(本機)上的active資料庫,並調用list命令,查看其中資料。
./mongofiles --uri mongodb://testuser:testpwd@127.0.0.1:27017/active list
(2)若無認證需求,且查看的是admin資料庫,則可以簡化為
./mongofiles --uri mongodb://127.0.0.1 list
(3)在mongodb3.0版本後其預設採用了SCRAM-SHA-1的認證方式,如果需要調整mongodb主機端的認證方式,可以參考該網址:mongodb3.03開啟認證,而如果需要調整用戶端這邊傳輸過去的認證方式,可以通過增加options參數實現。
./mongofiles --uri mongodb://testuser:testpwd@127.0.0.1:27017/?authMechanism=MONGODB-CR delete_id 111
多個options參數指定之間請用&隔開。
使用過程中的問題:
在實際使用過程中,以例子(1)中的方式調用命令遇到了問題:
在確認過使用者名稱和密碼等其他參數都正確的情況下,查看了mongodb中的logs,其中的報錯資訊為:
UserNotFound: Could not find user XXX@test
其中XXX為使用的使用者名稱,而@之後的就是資料庫名,意思為test資料庫中找不到XXX使用者,即使用者不存在或者無操作許可權。問題在於參數中的確是指定了對應的資料庫active,而資料庫端仍然判斷為test資料庫。
這個問題暫時沒找到原因,未確認是特例還是普遍情況。替代方案是使用-d指定對應資料庫,即
./mongofiles -d active --uri mongodb://testuser:testpwd@127.0.0.1:27017 list
該方式下,命令執行成功。
相關操作命令:
list : 列出資料庫資料
put/put_id : 儲存檔案/且指定id
get/get_id : 根據檔案名稱/id取出檔案
delete/delete_id : 根據檔案名稱/id刪除檔案
具體可參考文檔:mongfiles
另外linux下不用設定檔直接啟動mongodb:
bin/mongod -dbpath /data/mongo/ -logpath /data/mongo/mongo.log -logappend -fork -port 27017
以後台方式執行。