2013-06-21 24 views
6

Ben bir model "Kategori" sahip çoğaltma olmadan birbirlerine nesneleri bağlayan. Koleksiyon categories çeşitli nesneler içeriyor. Ayrıca bir model "Post" var. Koleksiyon posts, kullanıcıların yayınlarına sahip çok sayıda nesne içerebilir. "Gönderi" nesnesi 1+ kategoriyle ilişkili olabilir. Nasıl alt belgeyi olarak içeride "Kategori" -Nesne -Nesne "Post" koymadan "Kategori" 1+ "Yükle" nin nesne -Nesneleri bağlanır? Elbette, belirli kategorilerle ilgili tüm yayınları bulmak için bir seçeneğim olması gerekiyor. Tahmin edebiliyorum yollardanGelincik -

biri ile ilgili olduğunu bütün kategorilerin "Post" -Nesne obj_id içinde saklamaktır. Böyle Smth: Daha sonra

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

ve eklemek kategorisi ...

post.category.push(obj_id); 

ama gerçekten bir firavunfaresi-yoldur? Hangi yol doğru? Teşekkürler.

P.S. Ayrıca, mongoose dokümanlarındaki nüfus yöntemlerini de okudum, bu benim durumumda yararlı olabilir mi? Hala benim için tamamen açık değil, bu ne.

cevap

16

Populate da yayın ve kategoriler arasında birçok ilişki bir çoğu oluştururken beri bunu için daha iyi bir araçtır. Alt belgeler, yalnızca üst nesneye ait olduklarında uygundur. doldurmak Sonra

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

kullanarak sorguya sırasında onları rehydrate:

Post.findOne({ title: 'Test' }) 
.populate('category') 
.exec(function (err, post) { 
    if (err) return handleError(err); 
    console.log(post.category); 
}); 
Dizideki üzerine iterek belgeleriyle kategorileri ekleyebilirsiniz

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

: Bir başvuru kullanmak için postSchema değiştirmeniz gerekecektir

+0

teşekkürler! Post.category.push (category1); 'de kategori1 tam olarak ne olmalıdır? ObjectID veya başka bir dize ile dize olmalı? Ve bir soru daha: "rehidrat" nedir? Bu süreç ne yapar? Neden buna ihtiyacım var? –

+0

Gerçek bir kategori modeli örneği olmalıdır. Rehidrate ile sadece referansları Ids yerine gerçek belgelerle doldurmak istiyorum. –

İlgili konular