使用mongolite将无序插入Mongodb

时间:2017-06-27 14:11:57

标签: r mongodb mongolite

以下示例执行三个文档的无序插入。对于无序插入,如果在插入其中一个文档期间发生错误,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。

1 个答案:

答案 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维护人员自行决定