Odpowiedzią jest zmiana schematu.
Wpadłeś w pułapkę, którą wielu programistów ma przed sobą, kiedy wkraczają do tworzenia baz danych dokumentów z historii używania relacyjnych baz danych:MongoDB nie jest relacyjną bazą danych i nie powinno być traktowane jak jedna.
Musisz przestać myśleć o kluczach obcych i idealnie znormalizowanych danych, a zamiast tego utrzymywać każdy dokument tak samodzielny, jak to możliwe, myśląc o tym, jak najlepiej osadzić odpowiednie powiązane dane w swoich dokumentach.
Nie oznacza to, że nie możesz też utrzymywać skojarzeń. Może to oznaczać strukturę taką jak ta, w której umieszczasz tylko niezbędne szczegóły i w razie potrzeby wysyłasz zapytanie o pełny rekord:
var activitySchema = new mongoose.Schema({
event: {
_id: { type: ObjectId, ref: "Event" },
name: String,
private: String
},
// ... other fields
});
Ponowne przemyślenie strategii umieszczania na stronie znacznie uprość zapytania i ogranicz liczbę zapytań do minimum. populate
szybko przyspieszy Twoje zliczanie, a wraz ze wzrostem zestawu danych najprawdopodobniej stanie się to problemem.