Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 强制查询的投影规则_Mongodb - Fatal编程技术网

Mongodb 强制查询的投影规则

Mongodb 强制查询的投影规则,mongodb,Mongodb,有没有一种方法可以基本上对集合上的所有查询强制执行投影规则?因此,例如,如果我有一个集合小部件,有没有办法确保默认情况下查询中不会返回文档中存在的字段secretAttribute,除非查询投影明确要求它。这与自动投影\u id的方式相反,除非投影参数明确拒绝它。例如,我可能有一个小部件文档: {u id:'51A4E3962DFF00105000009',名称:'foo',颜色:'white',状态:'open',secretAttribute:'bar'} 如果我执行db.widget.fi

有没有一种方法可以基本上对集合上的所有查询强制执行投影规则?因此,例如,如果我有一个集合
小部件
,有没有办法确保默认情况下查询中不会返回文档中存在的字段
secretAttribute
,除非查询
投影
明确要求它。这与自动投影
\u id
的方式相反,除非投影参数明确拒绝它。例如,我可能有一个
小部件
文档:

{u id:'51A4E3962DFF00105000009',名称:'foo',颜色:'white',状态:'open',secretAttribute:'bar'}

如果我执行
db.widget.find({color:'white'})
它将返回文档,但不显示
secretAttribute

{u id:'51A4E3962DFF00105000009',名称:'foo',颜色:'white',状态:'open'}

我必须在
projection
参数中明确要求
secretAttribute
,以
find()

db.widget.find({color:'white'},{name:1,color:1,status:1,secretAttribute:1})
获取它


谢谢

目前没有办法做到这一点。如果它是一个大而通常不需要的字段,你可以考虑把它存储在一个单独的集合中(当你确实需要它时,需要第二次读取,但是它可能是一个总的资源节省,取决于它有多大等)。

< P>你现在所要求的是不可能的。在我的应用程序中,我在memcached中保留了一个更轻版本的对象。例如,在本例中,您可以创建一个widgetLite对象并将其保存在memcache中,该对象可能只有id、名称、颜色和状态。在大多数情况下,您只需要检索widgetLite对象,从memcache获取它将非常快,并将导致更少的db查询,从而提供更好的性能