поиск по нескольким коллекциям с mongodb - PullRequest
0 голосов
/ 02 июля 2018

Я хочу проверить, присутствуют ли определенные данные в нескольких документах или нет.

например, я хочу проверить, существует ли электронная почта в коллекции пользователей и в коллекции клиентов, если она действительно хочет получить данные.

Я пробовал запрос ниже, но он не работает, поскольку он проверяет только одну коллекцию.

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

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

На самом деле вам нужно найти в 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();
0 голосов
/ 02 июля 2018
if(db.t_usermasters.count({email: 'test@test.com'}) 
     && db.t_customermasters.count({email: 'test@test.com'})) {

   /* fetch your data here
      you can associate these two collections by using a customerId field in your 
      usermasters collection and then populate it ('customerId') 
      while fetching the data from usermasters collection */
}
0 голосов
/ 02 июля 2018

Попробуйте этот код:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...