在casbah中,我看到mongocollection上定义了以下函数:
def
insert[A](docs: A*)(implicit dbObjView: (A) ⇒ commons.TypeImports.DBObject, concern: mongodb.WriteConcern = writeConcern, encoder: TypeImports.DBEncoder = ...): TypeImports.WriteResult
如果我理解这一点,您可以将多个dbobjects传递给此函数进行大容量插入。
我的担心/问题是这是一个参数列表。如果我有一个巨大的批量插入(比如说几百个)?这样可以通过的对象有限制吗?
最佳答案
在单个命令中可以使用的文档大小有一个限制~16MB,因此可以通过该路径执行的插入次数有一个限制。
但是,如果您使用Casbah 2.7 for MongoDB 2.6中发布的BulkOperationBuilders
中的一个,它将自动将操作分成批,以便您可以执行更大的批量操作:
val collection = MongoClient()("test")("bulkOperation")
collection.drop()
// Ordered bulk operation
val builder = collection.initializeOrderedBulkOperation
builder.insert(MongoDBObject("_id" -> 1))
builder.insert(MongoDBObject("_id" -> 2))
builder.insert(MongoDBObject("_id" -> 3))
builder.find(MongoDBObject("_id" -> 1)).updateOne($set("x" -> 2))
builder.find(MongoDBObject("_id" -> 2)).removeOne()
builder.find(MongoDBObject("_id" -> 3)).replaceOne(MongoDBObject("_id" -> 3, "x" -> 4))
val result = builder.execute()
有有序或无序操作,请参见:http://mongodb.github.io/casbah/whats_new.html#ordered-unordered-bulk-operations