如何从R mongolite包查询mongodb集合字段名称

时间:2018-12-03 12:09:06

标签: r mongodb mongolite

我想从R mongolite返回给定mongodb集合的字段名称。

从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

您能告诉我如何使用run命令返回给定集合的列名吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您真的不能直接做到这一点。

如果可以的话,那将在很大程度上违反NoSQL数据库(Mongo是)的整个哲学。 NoSQL数据库的想法是,您有一组文档,这些文档都可以有自己的字段。
与纸质文档的类比确实有效,并且“列”的概念被“字段”代替,“字段”与整个集合无关,但与单个文档有关,每个文档可以包含任何内容。而且,没有所有内容都必须适合的总体强制性模板。实际上,很多文档都具有类似的结构,但这绝不能保证。这意味着您完全有可能拥有1亿个文档,其中包含3个分别称为“ a”,“ b”和“ c”的字段,而文档100000001则具有4个字段:a,b,c和d。

数据库引擎可能会跟踪集合中某处的字段,但我对此表示怀疑。如果没有,获取所有四个名称a,b,c和d的唯一方法是遍历所有100000001个文档(或更多),这将需要一段时间。毫无疑问,已经实现了一些优化,但这始终是一个难题。

如果您只想为一个小型数据库提供答案,我认为只需查询所有文档并获取结果data.frame的列名即可。

但是,如果您的数据库很大,那么这个问题就不再是R或mongolite了,我不足以与Mongo合作进一步为您提供帮助。