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

343
Vistas
MongoDB - $nin operador no válido con agregado

Tengo una función que debería devolver un recuento de usuarios creados en un período determinado y agrupados por invitados y no invitados. En el operador $cond , necesito comparar si el campo tkbSponsor no es null y no es igual a example@example.com . Si esta condición resulta verdadera, entonces se invitó al usuario. De lo contrario, no fue invitado.

 var countByPeriod = function(req,res) { var initialDate = req.body.initialDate; var finalDate = req.body.finalDate; User.aggregate([ { "$match": { "timeStamp": { "$gte": new Date(initialDate), "$lt": new Date(finalDate) } } }, { "$group": { "_id": null, "total": { "$sum": 1 }, "invited": { "$sum": { "$cond": [ { "tkbSponsor": { "$nin": ["example@example.com",null] } }, 1, 0 ] } } } } ], (err,result) => { if (!err) { if (result.length) res.send(result[0]); else res.send({"total": 0,"invited":0}); } else { res.sendStatus(500); console.log(err); } }); };

Por cierto, esta función me está dando un error cuando se ejecuta:

 { [MongoError: invalid operator '$nin'] name: 'MongoError', message: 'invalid operator \'$nin\'', ok: 0, errmsg: 'invalid operator \'$nin\'', code: 15999 }

Solo una observación. Solía usar el operador $cond como se muestra a continuación, porque no necesitaba comparar con null :

 "$cond": [ { "$ne": ["$tkbSponsor", "example@example.com"] }, 1, 0 ]

Y funciona. Sin embargo, ahora también tengo que comparar si el tkbSponsor no es nulo y usando $nin , me está dando ese error.

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

0

Cambie eso para usar $and junto con $ifNull se fusionan como:

 { "$cond": [ { "$and": [ { "$ne": ["$tkbSponsor", "example@example.com"] }, { "$ne": [ { "$ifNull": [ "$tkbSponsor", null ] }, null ] } ] }, 1, 0 ] }

o usando $or como

 { "$cond": [ { "$or": [ { "$eq": ["$tkbSponsor", "example@example.com"] }, { "$eq": [ { "$ifNull": [ "$tkbSponsor", null ] }, null ] } ] }, 0, 1 ] }

La presencia del operador $ifNull es actuar como un operador $exists al reemplazar los campos "no existentes" o nulos con un valor null para la evaluación.

Ejecutar esto debería arrojar los resultados correctos ya que la revisión anterior solo evaluaba documentos donde exists el campo tkbSponsor Y tiene un valor null o "example@example.com".

Con $ifNull , los campos "no existentes" también se evalúan cuando el operador les da el valor nulo.

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