使用mongodb搜索多个集合

时间:2018-07-02 10:22:45

标签: mongodb find aggregation-framework

我想检查多个文档中是否存在特定数据。

例如,我想检查用户集合中是否存在电子邮件,如果要收集数据,则是否要收集客户。

我在下面的查询中尝试过,但是由于只检查一个集合而失败。

db.t_usermasters.aggregate([
{
    $match: {
        "email" : "test@test.com"
    }
},{
    $lookup: {
        from: "t_customermasters",
        localField: "email",
        foreignField: "email",
        as: "UserDetails"    
  }
}
]).pretty();

3 个答案:

答案 0 :(得分:0)

尝试以下代码:

db.t_usermasters.aggregate([
{
    $match: {
        "email" : "test@test.com"
    }
},{
    $lookup: {
        from: "t_customermasters",
        localField: "email",
        foreignField: "email",
        as: "UserDetails"    
  }
}, {
    $match: { 
    UserDetails: { $exists: true, $not: {$size: 0} } 
 } 
}

]).pretty();

答案 1 :(得分:0)

您实际上需要在t_customermasters中查找,并通过使用空数组进行条件化来向下投射

db.t_usermasters.aggregate([
        {
            $match: {
                "email" : "test@test.com"
            }
        },
        {
            $lookup: {
                from: "t_customermasters",
                localField:"email",
                foreignField:"email",
                as: "UserDetails"    
          }
        },
        {
            $project:{
                _id:true,
                email:true,
                emailExistInBoth:{
                    $cond:{
                        if:{
                            $eq:[{$size:"$UserDetails"},0]
                        },
                        then:false,
                        else:true
                    }
                }
            }
        },
        {
            $match:{
                "emailExistInBoth":true
            }
        }
        ]).pretty();

答案 2 :(得分:0)

if(db.t_usermasters.count({email:'test@test.com'})&& db.t_customermasters.count({email:'test@test.com'})){ //在这里获取您的数据 //您可以使用usermasters集合中的customerId字段来关联这两个集合,然后在从usermasters集合中获取数据时填充它('customerId') }