Điều này không thể được thực hiện với một truy vấn đơn giản. Bạn sẽ phải lặp lại các staff.dep domains và đối với mỗi lần lặp lại, thêm các Department_id của nó vào một mảng. Mảng này sau đó bạn có thể sử dụng trong dòng thứ hai của mình. Đây là điều tốt nhất được thực hiện bằng ngôn ngữ bạn chọn.
Để làm cho việc này dễ dàng hơn, bạn sẽ phải thay đổi lược đồ của mình. Một tùy chọn là lưu trữ thông tin bộ phận trong hồ sơ nhân viên, nhưng trong trường hợp của bạn, bạn đang sao chép rất nhiều dữ liệu.
Thay vào đó, tôi khuyên bạn nên để mỗi bộ phận chứa một danh sách với ID nhân viên và ngày tháng như thế này:
{
"_id" : ObjectId("4f9643957f8b9a3f0a000004"),
"dept_name" : "Marketing",
"managers" : [
]
"employees" : [
{
"employee_id" : ObjectId("4f9643967f8b9a3f0a00005a"),
"from_date" : "1990-01-03",
"to_date" : "1990-01-15"
}
]
}
Trong trường hợp đó, bạn có thể chỉ cần chạy:
db.departments.find( { "employees.employee_id": ObjectId("some_id") } );