如何从 R mongolite 包中查询 mongodb 集合字段名称
How to query mongodb collection field names from R mongolite package
我想 return 来自 R mongolite 的给定 mongodb 集合的字段名称。
从 mongolite 最新版本(即 1.5+)开始,您可以 运行 mongodb 上的原始命令,我可以使用下面的示例来 return 所有集合:
m = mongo(db = 'dbname', url='urlofdb')
m$run('{"listCollections":1}')
这将 return 集合列表:
$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
你能告诉我如何使用 运行 命令 return 给定集合的列名吗?
谢谢!
我觉得你真的不能直接做。
如果可以,那将在很大程度上违背 NoSQL 数据库的整个理念(Mongo 是)。 NoSQL 数据库背后的想法是你有一个文档集合,它们都可以有自己的字段。
纸质文档的类比确实有效,'columns' 的概念被 'fields' 取代,它不属于整个集合,而是属于单个文档,每个文档可以包含任何内容.并且没有任何东西都必须符合的总体强制性模板。实际上,很多文件都会有类似的结构,但这绝不是保证。这意味着您完全有可能拥有 1 亿个文档,其中包含 3 个字段,分别称为 "a"、"b" 和 "c",而文档 100000001 有 4 个字段:a、b、c 和 d。
可能是数据库引擎跟踪集合中某处的字段,但我对此表示怀疑。如果没有,获得所有四个名称 a、b、c 和 d 的唯一方法是遍历所有 100000001 个文档(或更多),这将需要一段时间。毫无疑问,实现了一些优化,但永远是一个难题。
如果您只想要一个小型数据库的答案,我认为简单地查询所有文档并获取结果 data.frame 的列名是最简单的。
但如果你的数据库很大,这个问题就不再是关于 R 或 mongolite 的问题了,我还不够 Mongo 来帮助你进一步。
我想 return 来自 R mongolite 的给定 mongodb 集合的字段名称。
从 mongolite 最新版本(即 1.5+)开始,您可以 运行 mongodb 上的原始命令,我可以使用下面的示例来 return 所有集合:
m = mongo(db = 'dbname', url='urlofdb')
m$run('{"listCollections":1}')
这将 return 集合列表:
$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
你能告诉我如何使用 运行 命令 return 给定集合的列名吗?
谢谢!
我觉得你真的不能直接做。
如果可以,那将在很大程度上违背 NoSQL 数据库的整个理念(Mongo 是)。 NoSQL 数据库背后的想法是你有一个文档集合,它们都可以有自己的字段。
纸质文档的类比确实有效,'columns' 的概念被 'fields' 取代,它不属于整个集合,而是属于单个文档,每个文档可以包含任何内容.并且没有任何东西都必须符合的总体强制性模板。实际上,很多文件都会有类似的结构,但这绝不是保证。这意味着您完全有可能拥有 1 亿个文档,其中包含 3 个字段,分别称为 "a"、"b" 和 "c",而文档 100000001 有 4 个字段:a、b、c 和 d。
可能是数据库引擎跟踪集合中某处的字段,但我对此表示怀疑。如果没有,获得所有四个名称 a、b、c 和 d 的唯一方法是遍历所有 100000001 个文档(或更多),这将需要一段时间。毫无疑问,实现了一些优化,但永远是一个难题。
如果您只想要一个小型数据库的答案,我认为简单地查询所有文档并获取结果 data.frame 的列名是最简单的。
但如果你的数据库很大,这个问题就不再是关于 R 或 mongolite 的问题了,我还不够 Mongo 来帮助你进一步。