es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué será más rápido: buscar documentos con $lookup o buscarlos de forma concurrente?

Supongamos que tenemos dos colecciones: parents y children y tienen una relación de 1 a muchos (ejemplo con cliente Node.js MongoDB).

const parents = client.db('my_db').collection('parents');
const children = client.db('my_db').collection('children');

El primer enfoque sería:

await parents.aggregate([
    {$match: {_id: parentId}},
    {$lookup: {
        from: 'children',
        foreignField: 'parentId',
        localField: '_id',
        as: 'children'
    }}  
])

El segundo enfoque sería:

await Promise.all([
    parents.findOne({_id: parentId}),
    children.find({parentId})
])

Entonces, me pregunto si hay alguna diferencia entre los enfoques.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay diferencias entre los dos enfoques.

    El primer enfoque utiliza el marco de agregación para unir las dos colecciones y realizar la búsqueda. Esto puede ser más eficiente para conjuntos de datos muy grandes, ya que permite la indexación y puede aprovechar el uso de tuberías para optimizar la consulta. Sin embargo, puede ser más lento para conjuntos de datos más pequeños, ya que hay cierta sobrecarga involucrada en la ejecución del pipeline de agregación.

    El segundo enfoque realiza dos consultas individuales y utiliza Promise.all () para esperar a que ambas consultas se completen antes de devolver el resultado. Esto puede ser más rápido para conjuntos de datos más pequeños, ya que hay menos sobrecarga involucrada y puede ser más fácil de leer y entender el código. Sin embargo, puede ser menos eficiente para conjuntos de datos muy grandes, ya que puede resultar en más viajes de ida y vuelta a la base de datos y puede no poder aprovechar la indexación de manera efectiva.

    En última instancia, el mejor enfoque depende del caso de uso específico y del tamaño de los conjuntos de datos involucrados. Se recomienda probar ambos enfoques y determinar cuál funciona mejor para su aplicación específica.

Comments are closed.