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

285
Vistas
Verifique que el valor esté en una matriz en $cond

Estoy tratando de proyectar un valor en mi tubería de agregación en función de si alguna matriz en una matriz contiene un valor específico.

Esta es una versión simplificada de cómo se ven los datos:

 [ { "permissions": [ { "owners": [ "1" ] } ] }, { "permissions": [ { "owners": [ "2", "3" ] } ] } ]

Y traté de hacer lo siguiente (siendo "2" el valor de ejemplo que estoy buscando):

 { "$project": { owner: { $cond: { if: { $in: [ "2", "$permissions.owners" ] }, then: true, else: false } } } }

Ejemplo de patio de recreo

Pero siempre acaba siendo falso. ¿Algunas ideas?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El problema es que $permissions.owners es una matriz anidada. Verifique este ejemplo para ver eso.

Así que tienes que $unwind la matriz. Pero, si solo hay una matriz, puede buscar en la primera posición en la matriz como esta

Pero, suponiendo que podría haber muchas matrices, puede usar esta consulta.

  • $unwind la matriz para separar cada valor.
  • $set el valor en la variable del owner si existe el número 2.
  • $group para obtener valores nuevamente.

En este punto, existe una variable llamada owner que es una matriz booleana. Entonces, el siguiente paso es similar a la consulta que tiene.

  • $set de nuevo para saber si existe true en cualquier valor, por lo que la variable también será verdadera.
 db.collection.aggregate([ { "$unwind": "$permissions" }, { "$set": { "owner": { "$in": [ "2", "$permissions.owners" ] } } }, { "$group": { "_id": "$_id", "permissions": { "$push": "$permissions" }, "owner": { "$push": "$owner" } } }, { "$set": { "owner": { "$in": [ true, "$owner" ] } } } ])

Ejemplo aquí

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