1

这可能是一个微不足道的问题。我能够连接到远程 mongodb 服务器。我使用 mongolite 连接到数据库。我的数据库是移动应用程序。我也不知道在“收藏”中指定什么。我知道我可以指定任何集合。

library(mongolite)
con=mongo(collection = "test", url = "mongodb://user:password@ds035965.mongolab.com:35965/mobileapps")

虽然它正在连接,但没有显示任何数据。我也不明白为什么它会为 str(con) 显示这个:为什么 jeroen 在那里。

Classes 'mongo', 'jeroen', 'environment' <environment: 0x0000000014a8ec00>

它正在连接,但我无法查看所有收藏。我如何查看数据库中的所有集合。

另外,如何在不查询列名、类型等情况下对集合进行一些基本统计。我只能使用 con$count() 来计算数据库中的行数。类似于 db.getCollectionNames() 从 cmd 提示符。

更新 1

谢谢,我知道我必须在从 mongolite 连接时指定一个特定的集合。但是我如何使用 Rmongodb 连接仍然是一个问题。

mongo.create(host = "ds035965.mongolab.com", name = "MobileApp1", username = "user", password = "password ", db = "mobileapps")

这给了我一个错误:

Unable to connect to replset
Authentication failed.

更新 2

当我使用rmongodb连接到本地主机时,出现此错误。

Error in as.environment(pos) : invalid 'pos' argument

即使我能够看到数据库和其中的集合,我仍然会收到此错误。对正在发生的事情有任何想法。

4

1 回答 1

2

mongolite要求您连接到数据库的特定集合。初始化mongo对象时,您会看到dbandcollection参数默认为“test”

?mongolite::mongo

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

因此,当您con使用

con=mongo(collection = "test", url = "mongodb://user:password@ds035965.mongolab.com:35965/mobileapps")

即使您没有指定它连接到特定数据库,它也会连接到db = test,因为这是默认设置。因此,如果您没有名为test的数据库,它将不包含任何数据。这就解释了为什么您没有看到任何数据。


这是我的理解(我很高兴得到纠正),mongolite不可能查看数据库中的所有集合,因为您必须专门连接到一个。

如果你想看合集,可以试试rmongodb

library(rmongodb)
mongo <- mongo.create()
mongo.get.databases(mongo)
## returns databases

但是,要查看数据库中的所有集合,您不能使用该功能

mongo.get.database.collections(mongo, "test")

因为它返回一个空字符串。这是一个已知问题

一种解决方法是使用

## return all the collections in the database 'test'
mongo.command(mongo = mongo, db = "test", command = list(listCollections=1))

mongo.destroy(mongo)
于 2016-05-22T04:23:06.240 回答