Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

137
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda