2 votes

lookup avec l'équivalent LIKE dans MongoDB

J'ai ce code dans Postresql et je veux écrire le même dans MongoDB :

SELECT
   u.full_name,
   u.phone_number,
   e.full_name,
   e.phone_number
FROM
   client u
   INNER JOIN employee e ON (
       u.phone_number LIKE '%22%'
       AND e.phone_number LIKE '%22%'
   );

Je sais que je peux utiliser recherche comme équivalent de jointure, comme :

db.client.aggregate({
$lookup:
    {
        from: "employee",
        localField: "client_id",
        foreignField : "_id",
        as: "result"
    }
})

y Comme séparément ressemble à ceci :

db.client.find({phone_number: /55/})

Comment puis-je faire rejoindre y comme équivalents ensemble ? Je veux joindre des collections avec la condition que les clients et les employés doivent avoir par exemple les chiffres 55 dans leur champ numéro de téléphone. // Mise à jour : Documents de client La collection ressemble à ceci : client

name:'Thomas Smith',
    card_type:'Gold',
    card_term: new Date("2015-05-03"),
    gender:'male',
    password:'dsfsfds',
    phone_number:'494666027570'
    }
....

employé :

{
    name:'Patrick Manson',
    employee_datebirth: new Date("1986-05-08"),
    employment_start:'2014-12-06',
    gender:'male',
    paycheck:800,
    phone_number:'497185035712',
    position:'bodyweight-trainer'
    },{
....

3voto

Valijon Points 1685

Une autre solution valable consiste à utiliser $regexMatch (v>=4.2) ou $regex operador

db.client.aggregate([
  {
    $lookup: {
      from: "employee",
      let: {
        c_phone_number: "$phone_number"
      },
      pipeline: [
        {
          $addFields: {
            tmp: "$$c_phone_number"
          }
        },
        {
          $match: {
            phone_number: {
              $regex: ".*55.*"
            },
            tmp: {
              $regex: ".*55.*"
            }
          }
        },
        {
          $project: {
            tmp: 0
          }
        }
      ],
      as: "result"
    }
  },
  {
    $match: {
      "result.0": {
        $exists: true
      }
    }
  }
])

MongoPlayground

Note : Comme nous voulons inner join mais $lookup es left outer join nous devons ajouter un supplément $match condition.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X