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