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

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

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 Relatório

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 Relatório

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