首页 > 解决方案 > 过滤 $lookup 的结果

问题描述

我有一个正在工作的查找。但是,我需要使用 $match 或类似的东西过滤结果。本地集合有一个名为“clinic_id”的字段。from 集合有一个名为 branchId 的字段。我需要确保过滤这些字段。基本上只有 branchId 为“1”和 Clinic_id 为“1”的结果。

 {
 $lookup:
 {
   from: "chatrooms",
   localField: "userId",
   foreignField: "user.id",
   as: "merged"
 }
}

我尝试使用 $match 和 $unwind 但不断收到错误。

标签: javascriptnode.jsmongodbmongoose

解决方案


查找后,您可以使用$match在同一查询中应用条件

{
    $lookup:
        {
           from: "chatrooms",
           localField: "userId",
           foreignField: "user.id",
           as: "merged"
        }
},{
    $match: {
              "merged.branchId" : "1",
              "clinic_id" : "1"
            }
}

您也可以先检查本地集合clinic_id,然后在查找后检查 branchId:(这会更快,因为查找时间会更少)

{
    $match: {
              "clinic_id" : "1"
            }
},
{
    $lookup:
        {
           from: "chatrooms",
           localField: "userId",
           foreignField: "user.id",
           as: "merged"
        }
},
{
    $match: {
              "merged.branchId" : "1"
            }
}

推荐阅读