mongodb的結構與關係型資料庫不同,它類似樹狀結構,可以很方便對每個分支進行操作,但它沒有像mysql那樣insert(value、value、value...)那樣的語法,也不支援transaction
所以mongodb不能批量插入資料,如果你要批量插入資料,可以在mongodb裡寫一個迴圈,它支援for等語法。
因為MongoDB的底層就不支援這種操作。
從MongoDB的oplog模式中可以看出,MongoDB的每次op都是獨立執行的最小單元,因此,不會存在多個op組合成一個執行的情況。因此在各種API中都不會存在這種批量插入的操作。
某網友提到他的理解,覺得很有道理:
這裡還是涉及到大家經常用到的傳統關係型資料庫和NoSQL的本質區別問題,NoSQL的每次操作都非常輕量級,小型化,除了資料的寫入外基本沒有多餘的操作。
類比:MongoDB就是放東西(資料)時把東西扔入相應的櫃子(資料庫)即可,而MySQL則要保持與送東西人的溝通(雙向連線保持),東西的摺疊整理分格儲存(有模式)。
MySQL的批量插入就是減少了溝通以及分格等過程,而MongoDB本身就不存在這些過程,因此MongoDB就不存在批量插入這個概念了。
我以前測驗用php進行批量向mongodb插入資料的程式碼:
$conn = new Mongo();
$db = $conn->selectDB("test");//這裡設定資料庫名稱
$collection = $db->mytable;//選擇表
/*
+----------------------------------------------------------------
批量插入資料,一次插入10萬條資料。把數字改掉就可以多插入些
+----------------------------------------------------------------
*/
$users = array();
for ($i = 0; $i<100000; $i++) {
$users[] = array('username' => 'user'.$i, 'i' => $i);
}
$ok = $collection->batchInsert($users);