无法使用Mongolite R验证凭据

时间:2015-04-19 17:56:59

标签: r mongodb heroku

我使用R并试图使用最近的“Mongolite”。但是我无法连接到MongoDB服务器。 该手册明确说明如下:

mongo(collection = "test", db = "test", url = "mongodb://localhost")

这就是我没有成功的尝试,当然我有一个日志令牌和端口。

mongodb://heroku:TOKEN@lennon.mongohq.com:PORT 

并不断收到以下错误:

Error in mongo_collection_new(url, db, collection) : 
  Failed to authenticate credentials.

4 个答案:

答案 0 :(得分:3)

mongolite (今天的v0.7)支持与远程 3.2.x MongoDB的身份验证连接(与 localhost相对) )。

下面的例子jeroenooms提供了自己的工作:

library(mongolite)
mongo(collection = "mtcars", url = "mongodb://readwrite:test@ds043942.mongolab.com:43942/jeroen_test")

解释:

  • mtcars是MongoDB“集合”的名称(如果您坚持,则为“表”)。它可能是一个尚不存在的名称。
  • readwrite是您的mongodb的用户名
  • test是用户“readwrite”
  • 的密码
  • ds043942.mongolab.com是远程主机,可以用ip地址替换,即23.20.234.21
  • 43942是端口号。在MongoDB中默认为27017
  • jeroen_test是正在使用的数据库实例的名称,该实例必须已存在

在R中运行上面的命令将打印:

  

Mongo消息:SCRAM:验证“readwrite”(步骤1)

     

Mongo消息:SCRAM:验证“readwrite”(步骤2)

     

Mongo消息:SCRAM:验证“readwrite”(步骤3)

     

Mongo消息:SCRAM:“readwrite”authenticated

     

...

我尝试用自己的远程主机信息替换它。它在开始时没有起作用,后者变成了用户角色问题,而不是 mongolite 问题。在确保用户具有正确的readWrite角色后,我通过 mongolite 包连接到我的远程3.2.x MongoDB。

以下两个来源对我在MongoDB中设置用户非常有帮助:

答案 1 :(得分:2)

如果您查看jeroenooms / mongolite的源代码,您会发现它还不支持身份验证:

https://github.com/jeroenooms/mongolite/blob/master/R/mongo.R

mongo_collection_new <- function(uri = "mongodb://localhost", db = "test", collection = "test"){
 stopifnot(is.character(uri))
 stopifnot(is.character(db))
 stopifnot(is.character(collection))
 .Call(R_mongo_collection_new, uri, db, collection)
}

答案 2 :(得分:0)

只需更改顺序:

mongo(url =“ mongodb:// localhost”,db =“ test”,collection =“ test”)

答案 3 :(得分:0)

我发现以下命令允许我使用 mongolite 和旧版 SCRAM-SHA-1 身份验证模式连接到 mongodb。

library(mongolite)
mongoUrl <- "mongodb://a_username:a_password@localhost:27017/admin" #<-admin here is the mongodb database that stores the authentication info

# specify your collection
colname <- "a_collection"

# specify your database
dbname <- "a_database"

# create connection (con)
con <- mongo(collection = colname, url = mongoUrl, db=dbname)

# count how many records (fyi this is just a test)
con$count('{}')