Isso não pode ser feito com uma simples consulta. Você terá que fazer um loop sobre employees.departments e, para cada iteração, adicionar seu department_id a um array. Essa matriz você pode usar em sua segunda linha. Isso é algo melhor feito no idioma de sua escolha.
Para tornar isso mais fácil, você terá que alterar seu esquema. Uma opção é armazenar as informações do departamento no registro do funcionário, mas no seu caso você estaria duplicando muitos dados.
Em vez disso, sugiro que cada departamento contenha uma lista com IDs e datas de funcionários, assim:
{
"_id" : ObjectId("4f9643957f8b9a3f0a000004"),
"dept_name" : "Marketing",
"managers" : [
]
"employees" : [
{
"employee_id" : ObjectId("4f9643967f8b9a3f0a00005a"),
"from_date" : "1990-01-03",
"to_date" : "1990-01-15"
}
]
}
Nesse caso, você pode simplesmente executar:
db.departments.find( { "employees.employee_id": ObjectId("some_id") } );