Как запросить имена полей коллекции mongodb из пакета R mongolite

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

Начиная с последних версий mongolite (то есть 1.5+), вы можете выполнить команду raw на 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

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

Спасибо!

1 ответ

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

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

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

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

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

Другие вопросы по тегам