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

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

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