在我的聚合管道的$lookup阶段,它需要基于_id进行连接,_id在连接集合上进行索引,目的是简单地检查连接集合中是否存在任何匹配,连接文档的实际数据并不重要,因此根本不需要在磁盘或RAM上检索。那么,如何编写$lookup以确保永远不会从磁盘检索数据,而是在找到匹配记录时返回true值呢?编辑日期:从磁盘中检索数据的开销很大,因此要避免这种操作。
$lookup
_id
true
hk8txs481#
在$lookup中,使用以$project阶段开始的管道,该阶段只包括_id字段。
{$lookup: { from: "targetCollection", localField: "fieldName", foreignField: "_id", as: "matched", pipeline: [ { $project: {_id: 1}}, { $count: "count" } ] }}
查询执行程序应该认识到,满足查询的该部分所需的所有数据都可以从索引中获得,并且不需要加载任何文档。注意:这里假设您使用的是MongoDB 5.0+
1条答案
按热度按时间hk8txs481#
在$lookup中,使用以$project阶段开始的管道,该阶段只包括_id字段。
查询执行程序应该认识到,满足查询的该部分所需的所有数据都可以从索引中获得,并且不需要加载任何文档。
注意:这里假设您使用的是MongoDB 5.0+