【问题标题】:How to query mongodb collection field names from R mongolite package如何从 R mongolite 包中查询 mongodb 集合字段名称
【发布时间】:2018-12-03 12:09:06
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: r mongodb mongolite


    【解决方案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 的合作中还不足以进一步帮助你。

    【讨论】:

    • 感谢 Emil 的回答,是的,我倾向于阅读大量收藏以获取名称。也许我会阅读最后一个文档并将其名称作为一种解决方法。
    • 这不是最后一个文件会得到你所有的名字!这只是最后一个文档包含所有名称的示例,但基本上任何文档都可以具有不在任何其他文档中的字段名。为了获得好印象,您可以收集样本并获取这些名称,但是您永远无法确定自己拥有一切,除非全部阅读。可以使用names(MyMon$aggregate('[{"$sample": {"size": 100}}]')) 或类似方式完成采样。
    • 再次感谢 Emil,是的,我明白你的意思。我只是这么说,因为我们附加到我们的数据,我对最近的文件感到担忧。是的,我脑子里有示例方法:)
    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多