Câu trả lời được đăng bởi @AnthonyWinzlet có nhược điểm là nó cần phải duyệt qua tất cả các tài liệu trong bộ sưu tập của người dùng và thực hiện $lookup
s là tương đối tốn kém. Vì vậy, tùy thuộc vào quy mô của Users
của bạn việc thu thập cũng có thể nhanh hơn để thực hiện việc này:
- Đặt chỉ mục trên
users.pet
vàusers.car
:db.users.createIndex({pet: 1, car: 1})
- Đặt một chỉ mục trên
cars.model
:db.cars.createIndex({model: 1})
- Đặt chỉ mục trên
pets.name
:db.pets.createIndex({name: 1})
Sau đó, bạn có thể chỉ cần làm điều này:
- Nhận danh sách tất cả
"Tesla"
phù hợp ô tô:db.cars.find({model: "Tesla"})
- Nhận danh sách tất cả
"Mickey"
phù hợp vật nuôi:db.pets.find({name: "Mickey"})
- Tìm những người dùng mà bạn quan tâm:
db.users.find({car: { $in: [<ids from cars query>] }, pet: { $in: [<ids from pets query>] }})
Điều đó khá dễ đọc và dễ hiểu cộng với cả ba truy vấn đều được bao gồm đầy đủ trong các chỉ mục, vì vậy chúng có thể được mong đợi là nhanh như mọi thứ có thể nhận được.