菜菜菜鸟
菜菜菜鸟
  • 发布:2022-03-29 21:45
  • 更新:2022-04-18 15:16
  • 阅读:189

为什们lookup之前要写个match才能正常执行呢

分类:uniCloud
const dbCmd = db.command;  
const $ = db.command.aggregate;  

db.collection("uni-id-users").aggregate()   
.lookup({  
    from:"uni-id-roles",  
    let:{  
        role: "$role"  
    },  
    pipeline:$.pipeline().match(dbCmd.expr( $.in(['$role_id',"$$role"]) )     
    )  
    // .project({      
    //  role_name:1  
    // })  
    // .project({      
    //  _id:0  
    // })  
    .done(),  
    as:"role",  
})  
.end()

这样直接报错 难道 lookup之前一定要写条件么?

db.collection("uni-id-users").aggregate()   
.match({status:0})  
.lookup({  
    from:"uni-id-roles",  
    let:{  
        role: "$role"  
    },  
    pipeline:$.pipeline().match(dbCmd.expr( $.in(['$role_id',"$$role"]) )     
    )  
    // .project({      
    //  role_name:1  
    // })  
    // .project({      
    //  _id:0  
    // })  
    .done(),  
    as:"role",  
})  
.end()

这个可以正常执行 ,我现在是只要求分页 不写这个条件限制 要怎么解决呢 ,我需要多表联合查询 3个表 有什么办法解决吗? 感谢~

2022-03-29 21:45 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

因为你有部分用户没有role,或者role不是数组。使用match之后正好过滤了那部分用户

该问题目前已经被锁定, 无法添加新回复