使用 mongolite 无序插入 Mongodb

Unordered insert into Mongodb using 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 }
)

mongolite 可以吗?我正在使用数据框将数据插入 mongo。

mongo shell 将多个插入语句转换为 bulk insert operation,这是有序与无序行为适用的地方。 Bulk API 是在 MongoDB 2.6 中引入的; MongoDB 的旧版本有一个批量插入 API,它有一个选项 "continue on error",默认为 false

mongolite R 包建立在官方支持的 libmongoc 驱动程序之上,但截至 mongolite 1.2 没有正确公开控制批量插入行为的选项。但是,底层 mongolite C 函数确实有一个 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 重命名为 ordered 可能更有意义,以与批量 API 保持一致,但我会把它留给 mongolite维护者。