1. 程式人生 > >MongoDB常用命令彙總之插入、更新和刪除操作詳解。

MongoDB常用命令彙總之插入、更新和刪除操作詳解。

Insurt操作

insurt操作是MongoDB插入資料的基本方法,對目標集合使用Insert操作,會將該文件新增到MongoDB並自動生成相應的ID鍵。文件結果採用類似JSON的BSON格式。常見的插入操作主要有單挑插入和批量插入兩種形式。插入時只是簡單地將文件存入資料庫彙總,不進行額外的驗證,也不會執行程式碼,所以不存在注入式攻擊的可能。

單條插入

批量插入

mongoDB對批量插入的支援是通過傳遞多個文件組成的陣列到資料庫來實現的。由於它插入資料是通過傳送TCP請求的,這樣只需傳送單個TCP請求,且資料庫無需處理大量的訊息頭,減少插入時間。這種方式的批量插入一次只能講多個文件插入到一個集合中,對於插入到多個集合可以迴圈呼叫Insert操作。

remove操作

remove函式可以用來刪除資料,它能接受一個文件作為可選引數,只有符合條件的文件才會被刪除。刪除資料是永久的,不能撤銷,也不能恢復,需要謹慎。刪除文件需要清空整個結婚,不如直接刪除集合快。

update操作

updagte函式用於修改資料庫中的資料,它接受兩個引數,一個是查詢文件,用來查詢要更新的文件,另一個是修改器文件,用於描述對找到的文件做哪些修改。更新操作是原子性的,如果多個更新同時發生,則所有的更新都會執行,但最後的更新是最終贏家。

整體更新(文件替換)

區域性更新(修改器)

部分更新是通過原子的更新修改器實現的,使用修改器時除了“_id”的值不能改變,其他任何值都能改變。文件替換是可以改變所有制的。

$inc修改器:將指定屬性的值增加特定的步長,如果鍵不存在則建立它。

set修改器:用來指定一個鍵的值,如果不存在則建立它。

$push:陣列修改器,如果指定的鍵存在,則向已有的陣列末尾加入一個元素,鍵不存在則會建立一個新的陣列。


upsert操作

upsert操作具有saveOrUpdate的功能,如果沒有文件符合更新條件,則以更新條件和更新文件為基礎建立一個新的文件。如果有符合更新條件的文件,則正常更新。建立新文件時會以條件文件作為基礎,將修改器作用其之上。Upsert操作是原子性的,高效的。


批量更新

批量更新只需將update的第4個引數設定為true即可。

瞬間完成

上面的插入、刪除和更新操作都是瞬間完成的,它們不需要等待資料庫響應。這樣的實現可以獲取高效能,速度非常快,只會受客戶端傳送傳送速度的和網路速度的制約。但由於不會獲取伺服器狀態,所以不能保證操作順利完成。這對於付費系統,安全性較高的系統是不可行的,此時對這些操作需要使用它們的安全版本。安全版本會在操作執行後立即執行getLastError命令,來檢查是否執行成功。如果失敗一般會丟擲可捕獲的異常,然後我們可以在程式碼中處理。

請求和連線

資料庫會為每個MongoDB資料庫連線建立一個佇列,存放這個連線的請求,客戶端新發送的請求會被放到佇列的末尾。只有佇列中的請求都執行完畢,後續的請求才會執行。即對於單個連線來說,請求都是順序執行不存在併發問題,所以它總能讀到自己寫的東西。但對於不通的連線就有可能出現讀取和寫入不一致的問題,在驅動程式使用連線池要特別注意此行為。