1

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

4

1 回答 1

1

shell将mongo多个插入语句转换为批量插入操作,这是有序与无序行为适用的地方。Bulk API 是在 MongoDB 2.6 中引入的;旧版本的 MongoDB 有一个批量插入 API,它有一个“错误继续”选项,默认为false.

mongoliteR 包建立在官方支持的驱动libmongoc程序上,但mongolite 1.2没有正确公开控制批量插入行为的选项。但是,底层 mongoliteC 函数确实有一个stop_on_error布尔值(默认值:)TRUE,它映射到有序插入和无序插入。

我已经提交了一个拉取请求(mongolite #99),它将通过stop_on_error批量插入的参数。

这不会改变默认mongolite行为,即在批量插入中遇到的第一个错误时停止。stop_on_error设置为FALSE,将为每批批量插入汇总错误。

示例用法(其中data可以是任何有效参数,insert()例如数据框、命名列表或带有 JSON 字符串的字符向量):

coll$insert(data, stop_on_error = FALSE)

stop_on_error为了与批量 API 保持一致,将参数从重命名为 可能更有意义ordered,但我将把它留给mongolite维护者自行决定。

于 2017-06-28T12:32:16.390 回答