如果嵌套,对 Mongodb Aggregate 有疑问

Posted

技术标签:

【中文标题】如果嵌套,对 Mongodb Aggregate 有疑问【英文标题】:Have a Question about Mongodb Aggregate if nested 【发布时间】:2021-09-29 07:48:23 【问题描述】:

我正在使用 aggregate 创建一个函数。我正在使用查找来绑定三个数据库。下面的函数组成时,有没有办法绑定A的数据和C的数据?

A.aggregate([
    
      $lookup: 
        from: "B",
        let:  aid: "$aid" ,
        pipeline: [
           $match:  $expr:  $in: ["$_id", "$$aid"]   ,
          
            $lookup: 
              from: "C",
              let:  bid: "$bid" ,
              pipeline: [
                
                  $match: 
                    $expr: 
                      $eq: ["$$bid, "$aid"],
                    ,
                  ,
                ,
              ],
              as: "list",
            ,
          ,
        ...
  ])

【问题讨论】:

您能否详细说明“捆绑”和“绑定”是什么意思?从您的示例中,您应该已经能够从 A 中查找 C 中的数据 我想知道是否有可能在C的管道中找到与A的字段匹配的值。 从 A 查找 C 和从 C 查找 A 有什么区别吗?您可能想给我们一些示例数据和预期输出,以向我们展示您想要实现的目标。 Mongo playground 将是有用的工具之一。 【参考方案1】:

我对此进行了更多了解,并且通过执行以下操作找到了我正在寻找的结果:

A.aggregate([
    
      $lookup: 
        from: "B",
        let:  bid: "$bid", aid: "$aid" ,
        pipeline: [
           $match:  $expr:  $in: ["$_id", "$$bid"]   ,
          
            $lookup: 
              from: "C",
              localField: "_id",
              foreignField: "cid",
              as: "list",
            ,
          ,
          
            $unwind: "$list",
          ,
          // One More Match
          
            $match:  $expr:  $eq: ["$$aid", "$list.aid"]  ,
          ,
          
            $addFields: 
              list: "$list.clist",
            ,
          ,
        ],
        as: "blist",
      ,
    ,
  ])

【讨论】:

以上是关于如果嵌套,对 Mongodb Aggregate 有疑问的主要内容,如果未能解决你的问题,请参考以下文章

mongodb aggregate

MongoDB聚合(aggregate)常用操作及示例

MongoDB:嵌套数组的总和

MongoDB:使用嵌套的 $group 聚合

Mongodb中数据聚合之聚合管道aggregate

Mongoose/Mongodb Aggregate - 对多个字段进行分组和平均