如何访问 mongoose $aggregate->$lookup-> pipeline->$match 中的字段名称

Posted

技术标签:

【中文标题】如何访问 mongoose $aggregate->$lookup-> pipeline->$match 中的字段名称【英文标题】:how to access field name in mongoose $aggregate->$lookup-> pipeline->$match 【发布时间】:2019-11-07 23:48:08 【问题描述】:

我有以下代码。

Users.aggregate([
     $lookup: 
          from: "payments",
          // localField:"_id",
          // foreignField:"restaurant_id",
          let: 
               id: "$_id"
          ,
          pipeline: [
               
                    $match: 
                         status: "Active", // If I add only this line it returns the result ->
                         restaurant_id:"$id" //or "$_id"  ->but after adding this line it return empty array
                         //if I change $id to static value of id result comes 
                    ,
               
          ],
          as: "subscription"
     
])

我无法在$match 中使用字段名称。如果我正在编写静态 id,它可以正常工作,但我需要使用动态 _id。请建议我如何在$match 中使用字段名称。我用过很多东西,比如$and$expr,但没有任何效果。

两个集合都在同一个数据库中

MongoDB服务器版本:3.6.9

“猫鼬”:“^5.3.4”

【问题讨论】:

【参考方案1】:

我已经从这个参考Specify Multiple Join Conditions with $lookup解决了这个问题

Users.aggregate([
     
          $lookup: 
               from: "payments",
               // localField:"_id",
               // foreignField:"restaurant_id",
               let: 
                    id: "$_id" //localField
               ,
               pipeline: [
                    
                         $match: 
                              $expr:
                                   $and:[
                                        $eq: ["$status","Active"],
                                        
                                             $eq:[
                                                  "$$id", //localField variable it can be used only in $expr
                                                  "$restaurant_id" //foreignField 
                                             ]
                                        
                                   ]
                              


                         ,
                    
               ],
               as: "subscription"
          
     
])

【讨论】:

以上是关于如何访问 mongoose $aggregate->$lookup-> pipeline->$match 中的字段名称的主要内容,如果未能解决你的问题,请参考以下文章

在 mongoose-aggregate-paginate-v2 中排序

按 mongoose-aggregate-paginate-v2 更改顺序排序

Mongoose.aggregate(pipeline) 使用 $unwind、$lookup、$group 链接多个集合

Mongoose,在子文档数组上应用`.aggregate()`,并以最少的查询次数获得文档其他字段的结果

MongoDB Aggregate 中的 Mongoose Virtuals

Mongoose Model#Aggregate函数返回0