Mam dwie kolekcje:Mongoose: zapełnianie()/DBref lub duplikacja danych?
- Użytkownicy
- Przesłane
Każdy przesyłanie ma User
z nim związane i muszę znać swoje dane, gdy Upload
jest oglądany. Czy najlepiej jest duplikować te dane w rekordzie przesyłania, lub użyć populate(), aby pobrać te szczegóły z kolekcji Użytkownicy, do której odnosi się _id
?
WARIANT 1
var UploadSchema = new Schema({
_id: { type: Schema.ObjectId },
_user: { type: Schema.ObjectId, ref: 'users'},
title: { type: String },
});
WARIANT 2
var UploadSchema = new Schema({
_id: { type: Schema.ObjectId },
user: {
name: { type: String },
email: { type: String },
avatar: { type: String },
//...etc
},
title: { type: String },
});
Z 'Opcja 2', jeśli jakiekolwiek dane w zmianach zbiórki Users
będę miał aby zaktualizować to poprzez al l skojarzone z rekordami Upload
. Z "Opcją 1" z drugiej strony mogę po prostu odpocząć i pozwolić populate()
zapewnić, że najnowsze dane Użytkownika będą zawsze wyświetlane.
Czy obciążenie związane z używaniem populate()
jest znaczące? Jaka jest najlepsza praktyka w tym powszechnym scenariuszu?
W jaki sposób można zaktualizować zduplikowaną datę? W przykładzie na blogu, jeśli powielasz informacje o użytkownikach (np. Nazwa) w rekordzie komentarza dla szybkich zapytań mono. Jeśli ten użytkownik zmieni nazwę, musimy zaktualizować każde wystąpienie ich nazwy w bazie danych, w tym przypadku w każdym zgłoszonym przez siebie komentarzu. – wilsonpage
musisz zadać sobie pytanie, ile razy zmienisz swoją nazwę użytkownika? być może aktualizacja zbiorcza zrobi w twoim przypadku lub po prostu wskaże ID obiektu do dokumentu użytkownika. Umieszczanie obiektów jest opcją, a nie dojo mongodb. – kilianc