首页 > 解决方案 > 如何从 R mongolite 包中查询 mongodb 集合字段名称

问题描述

我想从 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 命令返回给定集合的列名?

谢谢!

标签: rmongodbmongolite

解决方案


我不认为你真的可以直接做到这一点。

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

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

如果您只想要一个小型数据库的答案,我认为简单地查询所有文档并获取结果 data.frame 的列名是最简单的。

但是如果您的数据库很大,那么这个问题不再是关于 R 或 mongolite 的问题,而且我与 Mongo 合作还不足以进一步帮助您。


推荐阅读