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

166
Vistas
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 Respuestas
Responde la pregunta

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