Невозможно увидеть все коллекции с удаленного сервера 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)