Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

131
Views
Muchos a muchos con lista dinámica incrustada

Estoy tratando de seleccionar todos los usuarios que hacen referencia a un grupo que hace referencia a un permiso que tiene "válido" establecido en verdadero (posiblemente múltiples). Para lograr esto, planeo usar una agregación con una búsqueda.

 db={ "users": [ { "_id": "1", "groups": [ "2" ] }, { "_id": "2", "groups": [ "1" ] } ], "group": [ { "_id": "1", "permissions": [ "12", "3" ] }, { "_id": "2", "permissions": [ "3", "2" ] } ], "permission": [ { "_id": "12", "valid": true }, { "_id": "3", "valid": true }, { "_id": "2", "valid": true } ] }

No puedo pensar en una manera eficiente/simple de hacer esto.

tengo 2 ideas:

  1. tener una búsqueda de usuario a grupo con una canalización que realiza una búsqueda de grupo a permiso. El problema es que necesitaría hacer una coincidencia de $ para ver si la lista de grupos del usuario contiene la identificación de los grupos (que no sé si es posible)
  2. haga una búsqueda simple de usuario a grupo que desenrolle el campo unido y haga una segunda búsqueda usando el campo unido de grupo a permiso. Luego, al final, haga una combinación de $ para ver si alguno contiene un verdadero "válido" y agrupe los resultados para obtener los usuarios originales. Sin embargo, esta idea no suena muy eficiente. ( https://mongoplayground.net/p/JB9Yb3a65Cn )

¿Alguna idea o entrada sobre esto?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

  • puede usar una matriz directa de objetos sin $unwind en la búsqueda como campos locales,
  • la segunda búsqueda reemplazará el campo de group con la respuesta de permissions porque no es necesario en la siguiente etapa
 db.users.aggregate([ { $lookup: { from: "group", localField: "groups", foreignField: "_id", as: "group" } }, { $lookup: { from: "permission", localField: "group.permissions", foreignField: "_id", as: "group" } }, { $match: { "group.valid": true } }, { $unset: "group" } ])

Patio de recreo

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!