Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

138
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda