(1) mongodb的安裝 下載tgz解壓後,需要添加相應的環境變數才能在終端直接啟動mongod。 mongodb數據存儲在/data/db中,需要手動創建目錄樹,同時mongod執行的時候如果許可權不夠(不能往/data/db寫東西),需要改一下許可權。 (2) mongod的啟動 之後就可以在終 ...
(1) mongodb的安裝
下載tgz解壓後,需要添加相應的環境變數才能在終端直接啟動mongod。
mongodb數據存儲在/data/db中,需要手動創建目錄樹,同時mongod執行的時候如果許可權不夠(不能往/data/db寫東西),需要改一下許可權。
vim ~/.bashrc export PATH="~/download/mongodb-linux-x86_64-ubuntu/bin:$PATH" mkdir -p /data/db ls -l / 查看data目錄的許可權,發現擁有者可寫 ls -l /data 查看db目錄的許可權,發現擁有者可寫 chown -R "liaohuqiang" /data data下的所有文件的擁有者改為自己
(2) mongod的啟動
之後就可以在終端上輸入mongod,這個時候就啟動了mongodb,但是這個時候是在終端運行著的,相當於一個前臺進程,在這個終端你不能做其它操作。
可以使用--fork選項,開啟後會回到終端交互,可以繼續做自己的事。
fork表示以守護進程的方式啟動mongodb,創建一個伺服器進程。fork要配合logpath使用,表示日誌信息輸出到哪個日誌文件。logappend表示以追加的方式寫入日誌文件。
當然還有別的啟動方式,目前還沒用到,暫時先不說。
mongod --fork --logappend ~/mongo.log --logappend
(3)mongo的使用
啟動mongod後就可以在終端進入mongo進行相關資料庫操作
show dbs 顯示所有資料庫 use doctor 切換到某個資料庫"doctor", 不切換的話預設使用test db.dropDatabase() 刪除資料庫
show collections 顯示所有集合 db.sample.drop() 刪除集合 db.sample.insert({name:"pilgrimHui", label:"1"}) 插入一行記錄 db.sample.insert({...}) 如果文檔已存在,會更新_id,不存在則同insert db.sample.find({...}) 查找滿足條件的記錄,簡單的一些查詢條件見下麵
db.sample.find({...},{field1:1, field2:1}) 只找出某些欄位 db.sample.find() 查找sample集合所有記錄 db.sample.remove({...},1) 刪除滿足條件的記錄,參數1可選,代表只刪除1個 db.sample.remove({}) 刪除sample集合的所有記錄
(4) mongo里的update操作
db.collection.update(criteria, objNew, upsert, multi) criteria: 查詢條件,理解為sql update語句where後面的 objNew: 更新操作,理解為sql update語句set後面的 upsert: 如果不存在查詢到的記錄,是否插入。預設false,不插入 multi: 是否更新多條。預設false,只更新第一條。 # 例如:把集合里所有記錄的status改為0 db.sample.update({"status": {$ne: 0} }, {$set: {"status":0}}, {multi: true}) 或者 db.sample.update({"status": {$ne: 0} }, {$set: {"status":0}}, false,true)
(4) 幾個查詢操作符
$ne 不等
$gt 大於
$gte 大於等於
$lt 小於
$lte 小於等於
$in和$nin 是否在指定數組中
$all 是否全在指定數組中
$or 將數組中的多個鍵值對或運算
$slice:[1,2] 切片,取屬性值(數組)的某幾個
$size 該屬性值(數組)的長度
$exists:true 選擇該欄位存在的記錄
$not 對任何查詢操作符取非
$regex 使用正則表達式匹配
(5) 幾個更新操作符
{ $inc : { field : value } } { $set : { field : value } } { $unset : { field : 1} } { $push : { field : value } } 追加,field要是數組 { $pull : { field : value } } 和push相反 { $pop : { field : 1 } } 刪除最後1個值 { $pop : { field : -1 } } 刪除第1個值 { $currentDate: { <field1>: {$type:"date", ... } } 設定當前時間
{ $rename: {<field1>:<newName1>,<field2>:<newName2>,...} } 重命名欄位
(6) 用戶許可權設置
mongodb預設沒有帳號登錄,需要自己先添加帳號。
在admin資料庫添加的帳號為管理員帳號,在其它資料庫添加的帳號為普通用戶
用戶只能在用戶所在的資料庫登錄,包括管理員。
管理員只能在admin登錄認證後才能管理其它資料庫。
6.1 添加管理員帳號
use admin db.system.users.find() db.addUser('liaohuqiang','liaohuqiang') 添加管理員用戶,mongodb版本不同,可能會報錯,如果報錯找不到addUser則用下麵這個 db.createUser( { user: 'liaohuqiang', pwd: 'liaohuqiang', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
6.2 重新啟動mongod
創建成功後重啟mongod,這個時候開啟連接可以帶上--auth選項,代表驗證用戶許可權。
mongod --fork --logappend ~/mongo.log --logappend --auth
6.3 認證登錄
開啟後,直接mongo進去操作會受限,可以mongo連接時授權登錄;也可以連接進去後再認證。
mongo -u liaohuqiang -p --authenticationDatabase admin mysql -h ip -u root -p 亂入,對比一下mysql的連接 mongo use admin db.auth('liaohuqiang', 'liaohuqiang')
6.4 關閉連接
認證登錄後就可以像之前那樣操作資料庫了,操作完後可以在admin資料庫關閉連接。
use admin db.shutdownServer() 關閉mongod
(7) pymongo的連接
import pymongo client=pymongo.MongoClient('mongodb://username:password@ip') db=client['doctor'] users=db["user"] result= list(users.find( {'role':1}, {'_id':0} ) ) 選多個 result= users.find_one({"name":name}) 選單個 users.insert_one({"name":name}) 插一個,會自動生成主鍵 users.remove( {"name":name}, {"multi":True} ) 刪多個 users.update_one({'name':name},{'$inc':{'commitCount':1}}) 改一個