bulk insert与inserting multiple documents之间有什么区别吗?
document.getElementById('slide');
VS
var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "abc123", defaultQty: 100, status: "A", points: 100 } );
bulk.insert( { item: "ijk123", defaultQty: 200, status: "A", points: 200 } );
bulk.insert( { item: "mop123", defaultQty: 0, status: "P", points: 0 } );
bulk.execute();
有没有更快的?
答案 0 :(得分:33)
@Dummy是正确的,批量操作通常比单个插入更快,但是,从版本2.6及更高版本开始,使用collection.insert
插入多个文档只是BulkWrite
的语法糖。如果将ordered
标志设置为false,则性能应与无序批量插入相同:
db.collection.insert(<document array>,{ordered:false})
此操作将返回BulkWriteResult
,请参阅documentation中的更多详细信息。
答案 1 :(得分:25)
是的,有区别。使用批量操作(总是),您只需要访问数据库一次,然后对批量记录执行操作,然后返回应用程序。对于单独的插入,您将需要转到数据库,执行插入操作,然后返回到应用程序,并且您将为告诉数据库执行的每个插入操作重复此过程。因此,与批量操作相比,单个插入非常慢。这就像杂货购物,如果你有你需要购买的所有东西,你可以一次购买(批量插入),但如果每个项目,你需要开车到商店获得它,然后开车回家,然后开车回商店购买另一件商品,然后效率不高(如个别插页)
注意:即使在使用shell与MongoDB交互时,您只需处理一个insert
函数来进行批量和单个插入,您应该区分insertOne()
和{{ 1}}使用MongoDB驱动程序API时的操作。你永远不应该在一个循环中打电话给insertMany()
(理由:看看我上面的杂货购物比喻)。