Questo non può essere fatto con una semplice query. Dovrai scorrere employee.departments e per ogni iterazione aggiungere il relativo departments_id a un array. Questo array puoi quindi usarlo nella tua seconda riga. È meglio farlo nella tua lingua preferita.
Per rendere tutto più semplice, dovrai cambiare il tuo schema. Un'opzione è archiviare le informazioni del reparto nel record del dipendente, ma nel tuo caso duplicheresti molti dati.
Suggerirei invece di fare in modo che ogni dipartimento contenga un elenco con ID e date dei dipendenti invece come questo:
{
"_id" : ObjectId("4f9643957f8b9a3f0a000004"),
"dept_name" : "Marketing",
"managers" : [
]
"employees" : [
{
"employee_id" : ObjectId("4f9643967f8b9a3f0a00005a"),
"from_date" : "1990-01-03",
"to_date" : "1990-01-15"
}
]
}
In tal caso, puoi semplicemente eseguire:
db.departments.find( { "employees.employee_id": ObjectId("some_id") } );