2013-06-21 16 views
6

Mam model "Kategoria". Kolekcja categories zawiera kilka obiektów. Mam również model "Post". Kolekcja posts może zawierać wiele obiektów z postami użytkowników. Obiekt "Post" może odnosić się do 1+ kategorii. Jak połączyć obiekt "Opublikuj" z 1+ "Kategoria" - obiekty bez umieszczania "Opublikuj" - Obiekt w "Kategorii" - obiekt jako dokument podrzędny? Z pewnością potrzebuję opcji, aby znaleźć wszystkie posty związane z pewną kategorią.Mongoose - łączenie obiektów ze sobą bez powielania

Jednym ze sposobów, w jaki mogę sobie wyobrazić, jest przechowywanie w "Post" -obiekcie obj_id wszystkich kategorii, z którymi jest związany. Czymś tak:

var postSchema = mongoose.Schema({ 
    title: String, 
    description: String, 
    category: [ObjectId], 
    created_time: Number, 
}) 

i dodać kategorię później ...

post.category.push(obj_id); 

ale jest to naprawdę Mangusta-way? Która droga jest poprawna? Dzięki.

P.S. Czytałem również o metodach populacyjnych w dokumentach mangusty, czy może być przydatny w moim przypadku? Wciąż nie do końca dla mnie jasne, co to jest.

Odpowiedz

16

Populate to lepsze narzędzie do tego, ponieważ tworzysz wiele do wielu relacji między wpisami i kategoriami. Poddokumenty są odpowiednie, gdy należą wyłącznie do obiektu nadrzędnego. Trzeba będzie zmienić postSchema użyć odniesienie:

var postSchema = mongoose.Schema({ 
    title: String, 
    description: String, 
    category: [{ type: Schema.Types.ObjectId, ref: 'Category' }], 
    created_time: Number, 
}); 

Możesz dodać kategorie dokumenty pchania na tablicy:

post.category.push(category1); 
post.save(callback); 

Następnie nawodnienia je podczas kwerendy za pomocą wypełnienia:

Post.findOne({ title: 'Test' }) 
.populate('category') 
.exec(function (err, post) { 
    if (err) return handleError(err); 
    console.log(post.category); 
}); 
+0

dzięki! Czym dokładnie powinna być kategoria 1 w 'post.category.push (category1);'? Czy powinien to być String z objectID lub coś jeszcze? I jeszcze jedno pytanie: czym jest "nawodnienie"? Co robi ten proces? Po co mi to? –

+0

Powinna to być rzeczywista instancja modelu kategorii. Przez rehydratację mam na myśli wypełnienie referencji rzeczywistymi dokumentami zamiast Ids. –

Powiązane problemy