0

有没有办法对集合上的所有查询基本上强制执行投影规则?因此,例如,如果我有一个集合widget,有没有办法确保secretAttribute默认情况下不会在查询中返回文档中存在的字段,除非查询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' }

我必须secretAttributeprojection参数中明确要求find()

db.widget.find({color: 'white'}, {name:1, color:1, status: 1, secretAttribute: 1})为拿到它,为实现它。

谢谢

4

2 回答 2

1

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

于 2013-07-27T04:50:04.020 回答
1

目前没有办法做到这一点。如果它是一个很大且通常不需要的字段,您可能会考虑将其存储在一个单独的集合中(当您确实需要它时需要第二次读取,但它可能会根据它的大小等整体节省资源)。

于 2013-07-27T02:24:42.430 回答