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();
Run Code Online (Sandbox Code Playgroud)
VS
db.collection.insert(
<document or array of documents>
)
Run Code Online (Sandbox Code Playgroud)
有没有更快?
Ale*_*lex 36
@Dummy是正确的,批量操作通常比单个插入更快,但是,从版本2.6及更高版本,插入多个文档collection.insert只是一个语法糖BulkWrite.如果将ordered标志设置为false,则性能应与无序批量插入相同:
db.collection.insert(<document array>,{ordered:false})
Run Code Online (Sandbox Code Playgroud)
此操作将返回a BulkWriteResult,请参阅文档中的更多详细信息.
Tee*_*eez 25
是的,有区别.使用批量操作(总是),您只需要访问数据库一次,然后对批量记录执行操作,然后返回应用程序.对于单独的插入,您将需要转到数据库,执行插入操作,然后返回到应用程序,并且您将为告诉数据库执行的每个插入操作重复此过程.因此,与批量操作相比,单个插入非常慢.这就像杂货购物,如果你有你需要购买的所有东西,你可以一次性购买(批量插入),但如果每个项目,你需要开车到商店得到它,然后开车回家,然后开车回商店买另一件物品,那就不是很有效了(比如个别插件)
注意:即使在使用shell与MongoDB交互时,您只需要处理insert批量和单个插入的一个函数,您应该在使用MongoDB驱动程序API时区分insertOne()和insertMany()操作.而且你永远不应该insertOne()在一个循环内打电话(理由:看看我上面的杂货购物比喻).