Câu trả lời là thay đổi lược đồ của bạn.
Bạn đã rơi vào cái bẫy mà nhiều nhà phát triển mắc phải trước bạn khi bắt đầu phát triển cơ sở dữ liệu tài liệu từ lịch sử sử dụng cơ sở dữ liệu quan hệ:MongoDB không phải là cơ sở dữ liệu quan hệ và không nên được coi như một cơ sở dữ liệu.
Bạn cần phải ngừng suy nghĩ về các khóa ngoại và dữ liệu được chuẩn hóa hoàn hảo, thay vào đó, hãy giữ cho mỗi tài liệu càng khép kín càng tốt, suy nghĩ về cách tốt nhất để nhúng dữ liệu liên quan có liên quan vào tài liệu của bạn.
Điều này không có nghĩa là bạn cũng không thể duy trì các liên kết. Nó có thể có nghĩa là một cấu trúc như thế này, nơi bạn chỉ nhúng các chi tiết cần thiết và truy vấn bản ghi đầy đủ khi cần:
var activitySchema = new mongoose.Schema({
event: {
_id: { type: ObjectId, ref: "Event" },
name: String,
private: String
},
// ... other fields
});
Xem xét lại chiến lược nhúng của bạn sẽ rất nhiều đơn giản hóa các truy vấn của bạn và giữ số lượng truy vấn ở mức tối thiểu. populate
sẽ làm cho số lượng của bạn tăng lên nhanh chóng và khi tập dữ liệu của bạn phát triển, điều này rất có thể sẽ trở thành một vấn đề.