r - 如何从 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 命令返回给定集合的列名?
谢谢!
解决方案
我不认为你真的可以直接做到这一点。
如果可以的话,那将在很大程度上违背 NoSQL 数据库(Mongo 就是)的整个理念。NoSQL 数据库背后的想法是您拥有一个文档集合,这些文档都可以拥有自己的字段。
与纸质文档的类比确实有效,“列”的概念被“字段”所取代,它与整个集合无关,而是与单个文档有关,每个文档可以包含任何内容。并且没有任何东西都必须适合的总体强制性模板。在实践中,很多文档都会有类似的结构,但这绝不是保证。这意味着您完全有可能拥有 1 亿个文档,其中包含 3 个字段,分别称为“a”、“b”和“c”,而文档 100000001 有 4 个字段:a、b、c 和 d。
可能是数据库引擎跟踪集合中某处的字段,但我对此表示怀疑。如果没有,获得所有四个名称 a、b、c 和 d 的唯一方法是遍历所有 100000001 个文档(或更多),这将需要一段时间。毫无疑问,实现了一些优化,但这始终是一个难题。
如果您只想要一个小型数据库的答案,我认为简单地查询所有文档并获取结果 data.frame 的列名是最简单的。
但是如果您的数据库很大,那么这个问题不再是关于 R 或 mongolite 的问题,而且我与 Mongo 合作还不足以进一步帮助您。
推荐阅读
- openapi - 如何在 Linux 机器上通过 Azure CLI 部署 openAPI?
- android - 具有动态表名的 Android Room Fetch 数据
- python - 在python中使用public_key进行KeyCloak解码
- mysql - 如何删除在 2 个表中找到的常见记录?
- c# - 如何在.net核心中使用自动映射器保存目标值
- javascript - 打字稿和 javascript 混合项目的更漂亮的自动格式化错误
- angular - 无法使用 ngx-doc-viewer 构建 Angular 项目
- html - data-option-value 属性有什么作用?
- java - 有人可以帮我处理返回功能吗?
- c++ - 打印所选长度字符的所有排列并在 CPP 中重复