今天我們來聊一下php與mongodb批量插入的問題。當我們需要往mongodb中插入大量數據時,單個插入顯然不太現實,我們需要使用批量插入。
在mongodb中,批量插入使用的是insertMany()方法。這個方法接受一個數組,數組中的每個元素都是一個文檔對象。
$docs = [ ['name' =>'Tom', 'age' =>18], ['name' =>'Jerry', 'age' =>20], ['name' =>'Mike', 'age' =>22], ]; $result = $collection->insertMany($docs);
上面的代碼就實現了批量插入三個文檔對象。注意,insertMany()方法返回的是一個InsertManyResult對象,可以通過這個對象的getInsertedCount()方法來獲得插入的文檔數量。
如果我們需要將一個大文件中的數據批量插入到mongodb中,可以使用fgetcsv()函數來讀取csv文件。我們可以將讀取到的每一行數據放進數組中,最后一次性插入。
if (($handle = fopen("data.csv", "r")) !== false) { $docs = []; while (($data = fgetcsv($handle, 1000, ",")) !== false) { $docs[] = [ 'name' =>$data[0], 'age' =>$data[1], ]; } fclose($handle); $result = $collection->insertMany($docs); }
除了使用數組來進行批量插入,我們還可以使用bson文件。bson文件是一種二進制json格式,可以更快的進行讀取操作。在php中,我們可以使用bson擴展來解析和生成bson文件。
// 生成bson文件 $doc = ['name' =>'Tom', 'age' =>18]; $bson = bson_encode($doc); file_put_contents('1.bson', $bson); // 讀取bson文件 $bson = file_get_contents('1.bson'); $doc = bson_decode($bson); $result = $collection->insertOne($doc);
最后,需要注意的是,批量插入雖然可以提高插入效率,但是也要考慮到mongodb的最大文檔大小限制。如果一次批量插入的文檔數量過多,可能會導致插入失敗或者性能下降。
上一篇oracle 硬件要求
下一篇ajax后臺中文亂碼問題