mongodb 如何防止在$lookup中从磁盘检索数据?

rqdpfwrv  于 2023-01-30  发布在  Go
关注(0)|答案(1)|浏览(90)

在我的聚合管道的$lookup阶段,它需要基于_id进行连接,_id在连接集合上进行索引,目的是简单地检查连接集合中是否存在任何匹配,连接文档的实际数据并不重要,因此根本不需要在磁盘或RAM上检索。
那么,如何编写$lookup以确保永远不会从磁盘检索数据,而是在找到匹配记录时返回true值呢?
编辑日期:
从磁盘中检索数据的开销很大,因此要避免这种操作。

hk8txs48

hk8txs481#

在$lookup中,使用以$project阶段开始的管道,该阶段只包括_id字段。

{$lookup: {
    from: "targetCollection",
    localField: "fieldName",
    foreignField: "_id",
    as: "matched",
    pipeline: [
        { $project: {_id: 1}},
        { $count: "count" }
    ]
}}

查询执行程序应该认识到,满足查询的该部分所需的所有数据都可以从索引中获得,并且不需要加载任何文档。
注意:这里假设您使用的是MongoDB 5.0+

相关问题