表关联问题

来源:3-3 【创建文档】动手实战 - 创建新文档的更多姿势

慕圣6101434

2022-11-24

老师,mongo能不能实现用关联出来子表的数据过滤父表的数据

写回答

1回答

好帮手慕小李

2025-02-13

在MongoDB中,可以使用聚合管道(Aggregation Pipeline)和$lookup操作符来实现关联查询,并通过$filter操作符对关联后的结果进行过滤。例如,您可以使用$lookup操作符在多个集合之间进行连接操作,以获取关联数据,然后通过$filter对关联的结果集进行过滤,以获得满足特定条件的结果集。

具体来说,您可以在$lookup操作之后使用$project阶段,并在其中使用$filter来筛选符合要求的子文档。以下是一个示例代码,展示了如何根据子文档的状态过滤父文档中的子文档数组

JavaScript复制

db.product.aggregate([
  {
    $lookup: {
      from: "inventory",
      localField: "product",
      foreignField: "product",
      as: "inventory_docs"
    }
  },
  {
    $project: {
      inventory_docs: {
        $filter: {
          input: "$inventory_docs",
          as: "item",
          cond: { $eq: [ "$$item.state", "OK" ] }
        }
      }
    }
  }])

在这个示例中,$lookup阶段用于连接productinventory集合,并将匹配的结果赋值给inventory_docs字段。然后,$project阶段中的$filter操作符用于筛选出state字段为"OK"的子文档


0
0

玩转MongoDB4.0(最新版) 从入门到实践

30%理论+70%实战,用实操检验真理,一门让你事半功倍的入门进阶课

1138 学习 · 197 问题

查看课程