Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

140
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda