【问题标题】:Unordered insert into Mongodb using mongolite使用 mongolite 无序插入到 Mongodb
【发布时间】:2017-11-30 15:22:47
【问题描述】:

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

【问题讨论】:

    标签: r mongodb mongolite


    【解决方案1】:

    mongo shell 将多个插入语句转换为bulk insert operation,这是有序与无序行为适用的地方。 Bulk API 是在 MongoDB 2.6 中引入的;旧版本的 MongoDB 有一个批量插入 API,它有一个“出错时继续”选项,默认为 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)
    

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

    【讨论】:

    • 我确实看到了您的拉取请求,这正是我所需要的。我不知道如何使您的拉取请求可供使用。我应该等待维护者合并它吗?
    • 当我尝试使用 devtools::install_github("stennie/mongolite/tree/issue-98") 它给了我安装失败:似乎不是一个 R 包(没有描述)跨度>
    • 我使用了devtools::install_github("stennie/mongolite", branch="issue-98"),它可以工作,但下载的版本是 1.2
    • 我使用了devtools::install_github("stennie/mongolite", ref="issue-98"),它成功了!谢谢大哥!
    猜你喜欢
    • 2016-06-29
    • 2018-01-18
    • 2019-05-11
    • 2019-03-20
    • 2017-12-22
    • 1970-01-01
    • 2016-03-31
    • 2023-03-31
    • 2016-09-20
    相关资源
    最近更新 更多