Attualmente la ricerca verrà effettuata per ogni employee_details, il che significa per 330000 volte, ma se prima ordiniamo e limitiamo prima della ricerca, saranno solo 10 volte. Ciò ridurrà notevolmente il tempo di query.
db.getCollection('employee_details').aggregate([
{$sort : {employee_fname: -1}},
{$limit :10},
{
$lookup : {
from : "departments",
localField : "department_id",
foreignField : "_id",
as : "Department"
}
},
{ $unwind : { path: "$Department", preserveNullAndEmptyArrays: true }},
])
Dopo aver provato questo, se vuoi anche ridurre il tempo di risposta puoi definire un index nel campo di ordinamento.
db.employee_details.createIndex( { employee_fname: -1 } )