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

198
Vistas
agregado de mangosta usando $ existe en $ cond

Quiero $project si existe un campo, pero no su valor, usando la consulta aggregate del model mongoose . Si fuera posible usar $exists en $cond , se vería así:

 $project: { b: { $cond: { if : {$exists: ['$b', true]}, then : true, else : false } } }

Pero tengo que usar una expresión boolean en el operador $cond . En el shell de MongoDB, puedo hacer algo similar con:

 {$eq: ['$b', undefined]}

y produce los resultados esperados, pero con el aggregate del modelo mongoose por alguna razón, siempre da como resultado true .

por ejemplo, si tengo los siguientes documentos:

 { "a" : 1, "b" : 2 }, { "a" : 1 }

Necesito los siguientes resultados:

 { "b": true }, { "b": false }

¿Cómo puedo hacer algo así con la mongoose ?

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

0

$exists no es compatible con la consulta aggregate de MongoDB . Entonces, en una consulta aggregate en lugar de $exists puede usar $ifNull .

sintaxis:

 { $ifNull: [ <expression>, <replacement-expression-if-null> ] }

para más

Actualizado:

para obtener el valor b como true o false puede probar esta consulta

 db.test.aggregate([ { $project: { b: { $cond: [ {$ifNull: ['$b', false]}, // if true, // then false // else ] } } } ])

Explicación:

 b = $cond: [ 'if condition satisfied', 'then true', 'else false' ];

where condition = {$ifNull: ['$b', false]} Aquí, si $b no existe, entonces condition = false de lo contrario condition = true .

entonces, si condition = true , devuelve el resultado que significa b = true
si condition = false entonces devuelve resultado de lo contrario significa b = false

over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar dos declaraciones $project para este caso y hacer uso del operador $ifNull (simplemente no funcionará cuando some_field se establezca como false , en cuyo caso puede cambiar el false interno a algo más adecuado)

 [ { $project: { test: { $ifNull: [ '$some_field', false ] } } }, { $project: { test: { $cond: { if : {$eq: ['$test', false]}, then : false, else : true } } } } ])
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