我想从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命令返回给定集合的列名吗?
谢谢!
答案 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合作进一步为您提供帮助。