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

170
Views
No pude consultar con una condición diferente en mangosta

Estos son mis modelos de operador:

 const operatorSchema = new Schema({ operatorName: { type: String }, users:[{ email:String, payment:Number, paymentsData: Date, product: String, }], });

Necesito filtrar por operatorName y correo electrónico en el bloque de usuarios. Pero cuando intento con esto, obtengo todos los usuarios en OperatorName relacionado, ¿cómo puedo consultar correctamente?

 Operators.find( { $and: [{operatorName: operatorName}, {'users.email': 'super@m.com'}]}, function (err, docs) { ) { if (err) console.log(err) else { docs.forEach(function(data){ console.log(data) }) // res.render('total_earns_operator_tables', { operators: docs }); } });

EDITAR

También intento con un método agregado como este, pero nuevamente, obtengo el mismo resultado y integro todos los datos del usuario, pero solo quiero demouser@mail.com

 Operators.aggregate([ { $match: {$and: [{ operatorName: operatorName},{'users.email': 'demouser@mail.com' }]}}, ] ,function (err, docs) { // console.log(Operators) // Operators.find( { $and: [{operatorName: operatorName}, {users: {$elemMatch: {email:['super@m.com']}}}]}, function (err, docs) { // Operators.find( {operatorName: operatorName, "users.email": "demouser@mail.com"}, function (err, docs) { if (err) console.log(err) else { docs.forEach(function(data){ console.log(data) }) // res.render('total_earns_operator_tables', { operators: docs }); } });

Es muy básico pero no pude encontrar la solución.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Su consulta está haciendo exactamente lo que se supone que debe hacer. Está devolviendo todos los documentos que satisfacen dos criterios: 1. tener un nombre de operatorName especificado y 2. una matriz de usuarios que tenga al menos un usuario que coincida con el correo electrónico especificado.

Si desea remodelar sus documentos filtrando la matriz de usuarios para incluir solo al usuario que coincida con su condición, deberá usar una agregación.

EDITAR

Según su edición: su agregación solo tiene una etapa $match , que es idéntica a su consulta anterior. Para cambiar la forma de un documento, el marco de agregación le proporciona la etapa $project , vea el ejemplo a continuación:

 Operators.aggregate([ { $match: { operatorName: operatorName, "users.email": "demouser@mail.com" } }, { $project: { operatorName: '$operatorName', users: { $filter: { input: "$users", as: "user", cond: { $eq: [ "$$user.email", "demouser@mail.com" ] } } } } } ]

Aquí, primero filtramos la colección para obtener solo los documentos que desea, usando la etapa $match , luego usamos el operador $filter en la etapa $project , para devolver solo los usuarios coincidentes dentro de la matriz.

Ver el patio de trabajo

about 4 years ago · Juan Pablo Isaza 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!