强制执行查询的投影规则

时间:2013-07-26 18:33:11

标签: mongodb

有没有办法基本上对集合上的所有查询实施投影规则?例如,如果我有一个集合widget,是否有办法确保默认情况下查询中不会返回文档中存在的字段secretAttribute,除非查询{{1}明确要求它。除了投影参数明确拒绝它之外,与projection如何被自动投影相反。例如,我可能有一个_id文档:

widget

如果我{ _id: '51a4e3962dfff00105000009', name: 'foo', color: 'white', status: 'open', secretAttribute: 'bar' },它将返回文档,但没有db.widget.find({color: 'white'})可见:

secretAttribute

我必须在{ _id: '51a4e3962dfff00105000009', name: 'foo', color: 'white', status: 'open' }的{​​{1}}参数中明确要求secretAttribute

projection得到它。

由于

2 个答案:

答案 0 :(得分:1)

目前无法做到这一点。如果它是一个大而且通常不需要的字段,你可以考虑将它存储在一个单独的集合中(当你想要它时需要第二次读取,但它可能是一个整体节省资源,取决于如何很重要,等等。)

答案 1 :(得分:1)

目前无法满足您的要求。在我的应用程序中,我在memcached中保留了对象的较轻版本。例如,在这种情况下,您可以创建一个widgetLite对象并将其保存在memcache中,该对象可能只有id,name,color和status。在大多数情况下,您只需要检索widgetLite对象并从memcache中获取它将非常快,并且将导致更少数量的数据库查询,从而为您提供更好的性能。