Как запросить имена полей коллекции 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, чтобы помочь вам в дальнейшем.