Если вы хотите использовать mongoDb в полной мере, я настоятельно рекомендую денормализовать ваши данные.
Если вы нормализуете свои данные, вам, возможно, придется использовать $ lookup для объединения нескольких коллекций.Даже если вы сэкономите на своем жестком диске, вы будете в конечном итоге выполнять относительно тяжелые вычисления.
Предполагая, что приложение обычно имеет 90% обращений при чтении и 10% при записи, имеет смысл смоделировать ваши данные удобным для чтения способом.Следовательно, очень денормализуйте ваши данные до тех пор, пока они действительно не станут необходимыми для создания ссылок на другие коллекции.Оптимизация может быть позже достигнута путем индексации и кэширования, но подумайте ниже:
User = {
_id: "uuid",
name: "string",
password: "string",
circles: ["circle1","circle2"],
events : ["event1","event2"]
}
Event = {
_id: "uuid",
name: "string",
location: "string"
}
Circle = {
_id: "uuid",
name: "string"
}
Попробуйте заранее узнать ваши запросы, архивируя большую часть ваших данных в коллекции User
.Поле circles
и events
в коллекции User
также может быть массивом объектов [{},{}]
, если есть еще свойства, которые нужно сохранить.
Я уверен, что чем больше коллекций вы объедините, тем сложнее будут обрабатываться ваши запросы, а также будет больше вычислений.
Я не рекомендую хранить userId в circle
или event
Коллекции как пользователи могут расти со временем, и вы не хотите заканчивать коллекцией, в которой есть документ с одним полем, хранящим тысячи элементов массива.Напротив, пользователь может участвовать в сотнях кругов и событий, и если мы сохраним эти данные в коллекции User
, их будет довольно просто запрашивать и обрабатывать.
Короче говоря: не обрабатыватьnosql db как реляционный db.Он никогда не будет вписываться. Смоделируйте вашу базу данных, помня ваши будущие запросы.Сильно денормализуйте ваши данные, чтобы упростить чтение, т. Е. Избегать ссылок.