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

190
Views
MongoDB condicional si más si existe

Estoy atascado en una consulta, mi caso es

 if user id exists then user id else if user name exists then user name else if user email exists then user email else ''

Aquí está mi código.

 $project: { ..... other fields, 'userDetail': { $cond: { if: { $exists: ['$user.id'] }, then: '$user.id', else: { $cond: { if: { $exists: ['$user.name'] }, then: '$user.name', else: { $cond: { if: { $exists: ['$user.email'] }, then: '$user.email', else: '', } }, } } } } }

Dado que $exists no funciona en esto. ¿Alguien puede ayudarme a encontrar la solución a este problema? Además, si user.id es '' (cadena vacía) y user.name es "Marcus". Quiero que el resultado devuelva user.name.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Consulta

  • si el id es falso o una cadena vacía, intente con el name ; de lo contrario, si el name es falso o una cadena vacía, intente con el email ; de lo contrario, ""
  • false son todos no-existe/null/false
  • los tipos de esos campos no son booleanos, por lo que es seguro usarlos de esta manera

* en caso de que realmente necesite $exist por ejemplo, si desea mantener los valores null o false , puede usar {"$eq":[{"$type":"$user.id"}, "missing"]}

Código de prueba aquí

 aggregate( [{"$set": {"userInfo": {"$switch": {"branches": [{"case":{"$and":["$user.id", {"$ne":["$user.id", ""]}]}, "then":"$user.id"}, {"case":{"$and":["$user.name", {"$ne":["$user.name", ""]}]}, "then":"$user.name"}, {"case":{"$and":["$user.email", {"$ne":["$user.email", ""]}]}, "then":"$user.email"}], "default":""}}}}])
over 4 years ago · Santiago Trujillo Report

0

Si lo he entendido correctamente (y según su ejemplo), puede usar una consulta como esta:

El truco aquí es usar ifNull en lugar de $exists .

 db.collection.aggregate([ { "$project": { "userDetail": { "$cond": [ { "$ifNull": [ "$user.id", false ] }, // user id exists "$user.id", // user id no exists { "$cond": [ { "$ifNull": [ "$user.name", false ] }, // user name exists "$user.name", // user name no exists { "$cond": [ { "$ifNull": [ "$user.email", false ] }, // user email exists "$user.email", // user email no exists "" ] } ] } ] } } } ])

Ejemplo aquí

over 4 years ago · Santiago Trujillo Report

0

Puede usar el operador $ifNull anidado, al verificar la condición anidada,

 { $project: { userDetail: { $ifNull: [ "$user.id", { $ifNull: [ "$user.name", { $ifNull: ["$user.email", ""] } ] } ] } } }

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!