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

138
Vistas
Obtenga un resultado basado en la propiedad de otro documento de un documento en MongoDB

Tengo dos documentos -

 const taskSchema = new mongoose.Schema({ leadId: { type: String, default: '' }, customer_name: { type: String, default: '' } }) const leadSchema = new mongoose.Schema({ Id: { type: String, default: "" }, associate_status: { type: Boolean, default: false }, })

Quiero ejecutar una consulta sobre tareas para obtener todos los clientes potenciales en los que el estado de asociado sea verdadero.

LeadId en el esquema de tareas es el mismo que Id en el esquema principal.

Intenté esto -

 const report = await taskModel.aggregate([ { $lookup: { from: 'leads', let: { leadId: '$leadId' }, pipeline: [ { $match: { $expr: { $eq: ['$Id', '$$leadId'], }, }, }, ], as: 'leaditems', }, } { $unwind: '$leaditems' }, { $match: { leaditems.associate_status: true}} ])

Pero como tengo una gran cantidad de documentos (más de 200 000 clientes potenciales y 100 000 tareas, y estos números seguirán creciendo), la consulta a veces se ejecuta después de 9 a 10 segundos y, a veces, no se ejecuta en absoluto. Estoy buscando un enfoque más optimizado o cualquier otra implementación que haga que esto funcione.

Actualizar:

Intenté esto también pero no mejoré.

 const report = await taskModel.aggregate([ { $lookup: { from: 'leads', let: { leadId: '$leadId' }, pipeline: [ { $match: { $expr: { $and: [ { $eq: ['$Id', '$$leadId'], }, { $eq: ['$associate_status', true], }, ], }, }, }, ], as: 'leaditems', }, } ])
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Para usar el índice en $exp dentro de una canalización de búsqueda, necesita MongoDB 5. MongoDB 4.4.9 no usará el índice y la consulta será lenta.

  • crear los índices en clientes potenciales e Id, se espera que sea mucho más rápido
    (el índice ayuda si tiene buena selectividad, si selecciona un pequeño porcentaje de los documentos, un índice que devolverá el 90% de los documentos puede empeorar las cosas) (si agrega muchos valores en el índice leadId, también se actualizará, puede costar, pero los beneficios la mayoría de las veces son mucho más)
  • reemplazar con una $lookup igualdad simple
  • Además, si realmente no necesita $unwind y prefiere sus datos en una matriz, puede usar $filter
 const report = await taskModel.aggregate([ { $lookup: { from: 'leads', localField: "leadId", foreignField: "Id", as : "leaditems" }, { $unwind: '$leaditems' }, { $match: { leaditems.associate_status: true}} ])

Si es posible, haga una evaluación comparativa después de hacer eso y envíe algunos comentarios.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Ponga $match en pipeline de $lookup o incluso intente ponerlo antes $lookup .

Establecer index en ambos ID asociados.

Tal vez su servicio tenga una restricción de conexión a la base de datos de 10 segundos, intente hacerlo más largo.

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