Как сделать Casbah объемных вставок
В casbah я вижу следующую функцию, определенную для MongoCollection:
def
insert[A](docs: A*)(implicit dbObjView: (A) ⇒ commons.TypeImports.DBObject, concern: mongodb.WriteConcern = writeConcern, encoder: TypeImports.DBEncoder = ...): TypeImports.WriteResult
Если я правильно понимаю, вы можете передать несколько DBObject-ов этой функции для массовой вставки.
Моя проблема / вопрос в том, что это список параметров. Что делать, если у меня есть огромный объемный вкладыш (скажем, пара сотен)? Есть ли предел объекта, который можно пройти таким образом?
1 ответ
Существует ограничение на размер документа, который можно использовать в одной команде ~16 МБ, поэтому существует ограничение на количество операций вставки, которые можно выполнить по этому маршруту.
Тем не менее, если вы используете один из BulkOperationBuilders
выпущенный в Casbah 2.7 для MongoDB 2.6, он автоматически разделит операцию на пакеты, чтобы вы могли выполнять более крупные массовые операции:
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.