列出mongodb对象中的字段

Jit*_*t B 0 mongodb

我正在开发一个系统,可以通过访问密钥与其他用户共享项目.我将访问键存储为shareinfo对象中的字段(嵌入在项目的文档中),如下所示:

shareinfo:{
    ........
    <nth key>: <permissions object - may be complex and large>
    ........
}
Run Code Online (Sandbox Code Playgroud)

当一个项目被访问时,我检查shareinfo.key并查找它是否有效.

目前,列出我正在加载(在Java中)整个shareinfo对象在内存中的键在其上运行keySet()以检索并返回键,而其余数据被浪费.

这是问题所在:我想得到没有附带数据的密钥列表(即对象字段名称)(因为在某些情况下,权限对象明显很大).

我在mongodb文档中找不到任何查询这样的查询.我想知道它是否可能?或者是否有一种优化的方法将字段名称列表加载到应用程序中而没有附带的字段值?

Dan*_* K. 7

在尝试使用mongodb shell了解现有mongodb数据库的结构时遇到了同样的问题.然后我发现我可以使用JavaScript函数Object.keys()来检索对象字段的数组.(使用MongoDb 2.4.2测试)

Object.keys(db.collection.findOne())
Run Code Online (Sandbox Code Playgroud)


And*_*ere 5

MongoDB 采用无模式设计,这意味着任何文档都可以包含与任何其他文档不同的字段。要获取所有文档的所有字段的详尽列表,您需要遍历集合中的所有文档并枚举每个字段。对于任何规模合理的集合来说,这将是一项极其昂贵的操作。

有几个帮助器可以使这变得更简单:Varietyschema.js 。它们都允许您限制检查的文件,并且它们还报告覆盖范围。两者都相当于对集合进行映射/归约,但至少比自己编写一个更简单。