Невозможно увидеть все коллекции с удаленного сервера mongodb, используя mongolite

Это может быть тривиальной проблемой. Я могу подключиться к удаленному серверу mongodb. Я использую монголит для подключения к БД. Моя БД - это мобильные приложения. Я также не знаю, что указывать в "коллекции". я знаю, что могу указать любую коллекцию.

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

Спасибо, я понимаю, что мне нужно указать конкретную коллекцию при подключении из монголита. Но как мне подключиться с помощью 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

Несмотря на то, что я могу видеть БД и коллекцию внутри, я все равно получаю эту ошибку. Любые мысли о том, что происходит.

1 ответ

Решение

Mongolite требует подключения к определенной коллекции базы данных. Когда вы инициализируете mongo объект, вы видите, что db а также collection аргументы по умолчанию "тест"

?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)
Другие вопросы по тегам