Как запросить имена полей коллекции mongodb из пакета R mongolite - PullRequest
0 голосов
/ 03 декабря 2018

Я хотел бы вернуть имена полей заданной коллекции mongodb из R mongolite.

Начиная с последних версий mongolite (то есть 1.5+), вы можете запустить необработанную команду на mongodb, которую я могу использоватьниже приведен, например, чтобы вернуть все коллекции:

m = mongo(db = 'dbname', url='urlofdb')
m$run('{"listCollections":1}') 

Это вернет список коллекции:

$cursor
$cursor$id
[1] 0

$cursor$ns
[1] "db.$cmd.listCollections"

$cursor$firstBatch
                           name       type          readOnly     idIndex.v   idIndex._id idIndex.name            idIndex.ns
1                    collection-name  collection    FALSE         1           1           _id_                   db.collection

Можете ли вы посоветовать, как я мог бы вернуть имена столбцов данногосбор с помощью команды запуска?

Спасибо!

1 Ответ

0 голосов
/ 03 декабря 2018

Я не думаю, что вы действительно можете сделать это напрямую.

Если бы вы могли, это в значительной степени пошло бы вразрез со всей философией базы данных NoSQL (которой является Mongo).Идея NoSQL-базы данных состоит в том, что у вас есть коллекция документов, у которых все могут иметь свои собственные поля.
Аналогия с бумажными документами действительно работает, и понятие «столбцы» заменяется «полями»,которые относятся не к коллекции в целом, а к отдельным документам, и каждый документ может содержать все, что угодно.И не существует всеобъемлющего обязательного шаблона, в который все должно вписываться.На практике многие документы будут иметь похожую структуру, но это ни в коем случае не гарантируется.Это означает, что вполне возможно, что у вас есть 100 миллионов документов с 3 полями, называемыми «a», «b» и «c», а этот документ 100000001 имеет 4 поля: a, b, c и d.

Может быть, движок базы данных отслеживает, какие поля находятся где-то в коллекции, но я сомневаюсь в этом.А если этого не произойдет, единственный способ получить все четыре имени a, b, c и d - это просмотреть все 100000001 документов (или более), что займет некоторое время.Несомненно, некоторая оптимизация реализована, но это всегда будет трудный вопрос.

Если вы просто хотите получить ответ для небольшой БД, я думаю, просто запросить все документы и взять имена столбцов полученных данных.frame - самый простой.

Но если ваша база данных велика, этот вопрос больше не касается R или монголита, и мне недостаточно работать с Mongo, чтобы помочь вам в дальнейшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...