无法使用 mongolite 从 MongoDB 远程服务器查看所有 collections

Unable to see all collections from a MongoDB remote server using mongolite

这可能是个小问题。我能够连接到远程 MongoDB 服务器。我使用 mongolite 连接到数据库。我的数据库是移动应用程序。我也不知道在 'collection' 中指定什么。我知道我可以指定任何 collection.

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

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

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

正在连接,但我看不到所有 collection。我如何查看数据库中的所有 collections。

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

更新 1

我知道在从 mongolite 连接时我必须指定一个特定的 collection。但是如何使用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

即使我能够看到数据库和其中的 collection,我仍然会收到此错误。对正在发生的事情有什么想法吗?

mongolite 要求您连接到特定的数据库集合。当您初始化 mongo 对象时,您会看到 dbcollection 参数默认为 "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 是一个空字符串。这是一个known issue

解决方法是使用

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

mongo.destroy(mongo)