以下示例执行三个文档的无序插入。对于无序插入,如果在插入其中一个文档期间发生错误,MongoDB会继续在数组中插入其余文档:
db.products.insert(
[
{ _id: 20, item: "lamp", qty: 50, type: "desk" },
{ _id: 21, item: "lamp", qty: 20, type: "floor" },
{ _id: 22, item: "bulk", qty: 100 }
],
{ ordered: false }
)
这可能与蒙古石有关吗?我正在使用数据帧将数据插入mongo。
答案 0 :(得分:1)
mongo
shell将多个insert语句转换为bulk insert operation,这是有序vs无序行为适用的地方。 Bulk API是在MongoDB 2.6中引入的;旧版本的MongoDB有一个批量插入API,可以选择“#34;继续出错”#34;默认为false
。
mongolite
R包构建在官方支持的libmongoc
驱动程序上,但是mongolite 1.2
没有正确公开控制批量插入行为的选项。但是,基础mongolite
C函数确实有stop_on_error
布尔值(默认值:TRUE
),它映射到有序vs无序插入。
我已提交拉取请求(mongolite #99),该请求将通过stop_on_error
参数进行批量插入。
这不会更改默认的mongolite
行为,该行为将停止在批量插入中遇到的第一个错误。将stop_on_error
设置为FALSE
后,将汇总每批批量插入内容的错误。
示例用法(其中data
可以是insert()
的任何有效参数,例如数据框,命名列表或带有JSON字符串的字符向量):
coll$insert(data, stop_on_error = FALSE)
将参数从stop_on_error
重命名为ordered
可能更有意义,以便与批量API保持一致,但我会将此问题留给mongolite
维护人员自行决定