0

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

shareinfo:{
    ........
    <nth key>: <permissions object - may be complex and large>
    ........
}

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

目前,为了列出我正在(在 Java 中)将整个 shareinfo 对象加载到内存中并在其上运行keySet()以检索和返回密钥,而其余数据被浪费了

这就是问题所在:我想获得没有附带数据的键列表(即对象字段名称)(因为在某些情况下权限对象非常大)。

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

4

2 回答 2

7

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

Object.keys(db.collection.findOne())
于 2013-04-26T06:20:52.810 回答
4

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

有几个助手可以让这更简单:Varietyschema.js 。它们都允许您限制检查的文件,并且它们还报告覆盖范围。两者都相当于对集合进行 map/reduce,但至少比自己编写要简单。

于 2012-09-14T04:52:14.930 回答