mongodb - 如何进行casbah批量插入

标签 mongodb scala casbah

在 casbah 中,我看到 MongoCollection 上定义了以下函数:

def
insert[A](docs: A*)(implicit dbObjView: (A) ⇒ commons.TypeImports.DBObject, concern: mongodb.WriteConcern = writeConcern, encoder: TypeImports.DBEncoder = ...): TypeImports.WriteResult

如果我理解正确,您可以将多个 DBObject 传递给此函数以进行批量插入。

我关心/问题是这是一个参数列表。如果我有大量插入物(比如说几百个)怎么办?通过这种方式传递的对象是否有限制?

最佳答案

单个命令中可使用的文档大小有限制 ~16mb,因此通过该路径可以执行的插入数量也有限制。

但是,如果您使用 Casbah 2.7 中针对 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

关于mongodb - 如何进行casbah批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23684938/

相关文章:

scala - 如何通过 Casbah 将带有列表的 Scala 对象转换为 MongoDBObject

scala - 如何使用 Casbah 清除/删除/清空 MongoDb 集合

mongodb - 以编程方式启用分片+使用带有 Mongo 2.4 的 casbah 在集合上选择分片键

node.js - MongoDB 客户端字段级加密 - NodeJS 驱动程序 - keyAltNames 字段未在本地 keystore 的数据 key 文档中创建

mongodb - 按搜索词相似度对结果排序

java - Java中关闭静态资源

java - 使用java反射获取scala中aspect中具有特定注释的方法参数

java - 更新mongodb java中的嵌套数组列表

java - 是否可以在不可变链表中进行循环?

scala - 用于对 Scala 集合中的元素进行复杂分组的内置方法