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

287
Views
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 answers
Answer question

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 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!