天天看点

MongoDB不支持批量插入

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);