对 MongoDB 3 的 rmongodb 支持

Posted

技术标签:

【中文标题】对 MongoDB 3 的 rmongodb 支持【英文标题】:rmongodb support for MongoDB 3 【发布时间】:2015-06-26 04:54:20 【问题描述】:

我正在构建一个 R 脚本,我需要在其中通过身份验证连接到 MongoDB 并使用 rmongodb 处理从数据库中获取的数据> 包。为此,我在 3.0.4 版 中创建了一个新的 MongoDB 用户,并且从 R 脚本 连接到 mongoDB 身份验证失败。 此外,用户通过 mongo shell 成功验证。 当我对在 MongoDB 版本 2.x 中创建的用户进行身份验证时,身份验证也可以正常工作。

以下是我们在 R 脚本中用于连接 Mongo 数据库的代码 sn-p。

mongo

在执行上述代码 sn-p 时,我们收到以下响应

错误:加载所需的包:rmongodb 身份验证失败。

请建议我解决 rmongodb 包中身份验证失败问题的适当解决方案。

【问题讨论】:

向我们展示您用于连接 MongoDB 的代码和错误消息(如果需要,请隐藏密码)。 @Spacedman 我已经包含了有问题的代码 sn-p 和错误消息 【参考方案1】:

rmongodb(截至 1.8.0)使用旧版 MongoDB C 驱动程序,该驱动程序尚不完全支持 MongoDB 3.0。特别是,它不支持使用新的 SCRAM-SHA-1 默认身份验证或可选的 WiredTiger 存储引擎。

Github 中有一个 rmongodb 问题跟踪此问题:Compatibility with version 3.0 of MongoDB。

rmongodb 更新之前,您的选项(按照麻烦最少到最多的顺序)包括:

使用支持 MongoDB 3.x 的不同驱动程序(即RMongo 0.1.0 or newer)

使用 MongoDB 2.6

使用 MongoDB 3.x 但降级到较旧的 MONGO-CR 身份验证(并且不要使用 WiredTiger 或任何替代存储引擎)

【讨论】:

注:看起来 RMongo 0.1.0 还没有登陆 CRAN,所以你可能需要从 github 上的 master 分支构建包。 我已将 MongoDB 3 配置为支持 MONGODB-CR 身份验证,因此用户已成功通过身份验证,R 脚本也能够使用 WiredTiger 存储引擎访问集合 @RubinPorwal 很高兴听到你成功了!除了身份验证之外,在 MongoDB 3.0 中使用较旧驱动程序的主要问题是,如果您的服务器使用的是 WiredTiger 等非默认存储引擎,则无法列出集合或索引。驱动程序需要实现新的listCollectionslistIndexes 服务器命令。【参考方案2】:

我自己刚刚经历了这个,我想我会加两分钱,以防它对某人有帮助。

@Stennie 正是针对身份验证的目标。因此,如果您想使用 mongo 3,其运行方式如下(这是来自 ubuntu 安装)。

1) sudo nano /etc/mongod.conf 2) Comment out the "auth=TRUE" line 3) sudo service mongod restart 4) login to mongo shell (now with no authentication so everything is open) 5) use admin 6) Execute the following: var schema = db.system.version.findOne("_id" : "authSchema") schema.currentVersion = 3 db.system.version.save(schema) (the above 3 commands are from here: https://jira.mongodb.org/browse/SERVER-17459) 7) create your users in the appropriate database 8) to make sure the right credentials are set up, type db.system.users.find() and amke sure they have the MONGODB-CR credentials 9) quit mongo 10) ucomment out the authentication line in /etc/mongod.conf 11) restart mongodb using sudo service mongod restart

现在应该可以工作了!我希望对某人有所帮助...

【讨论】:

以上是关于对 MongoDB 3 的 rmongodb 支持的主要内容,如果未能解决你的问题,请参考以下文章

更新 MongoDB 中的多个文档 (rmongodb)

使用 rmongodb 连接到 MongoDB 副本集

使用 rmongodb 在 R 中运行高级 MongoDB 查询

如何使用 rmongodb 将数据框插入 mongodb

MongoDB 和 rmongodb。获取查找的大小而不是返回所有结果

在 MongoDB (rmongodb) 中附加 BSON 数组