2013-06-21 4 views
6

私はモデル "カテゴリ"を持っています。コレクションcategoriesにはいくつかのオブジェクトが含まれています。 私もモデル "ポスト"を持っています。コレクションpostsには、ユーザーの投稿を含む多くのオブジェクトが含まれている可能性があります。 「投稿」オブジェクトは、1つ以上のカテゴリに関連している可能性があります。 「ポスト」オブジェクトを1+「カテゴリ」 - サブジェクトとして「カテゴリ」オブジェクト内に「ポスト」オブジェクトを配置しないオブジェクトにリンクする方法確かに、私はすべての投稿が特定のカテゴリに関連しているかどうかを調べるオプションが必要です。マングース - 重複することなくオブジェクトを互いに結ぶ

私が想像することのできる方法の1つは、関連するすべてのカテゴリの "投稿"オブジェクトobj_idに保存することです。このようななめらか:

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

以降カテゴリを追加...

post.category.push(obj_id); 

が、それは本当にマングースウェイをされますか?正しい方法は?ありがとう。

P.S.私はまた、mongooseドキュメントの人口の方法について読んだことがあります、それは私の場合に役立つかもしれませんか?それでも私はまだ完全にはっきりしていません。

答えて

16

Populateは、投稿とカテゴリの間に多対多の関係を作成しているため、これに適したツールです。サブオブジェクトは、それらが親オブジェクトに排他的に属している場合に適切です。あなたは、参照を使用するようにpostSchemaを変更する必要があります:

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

あなたがアレイ上に文書を押して、カテゴリを追加することができます

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

その後移入使用してクエリの間にそれらを再水和:

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

ありがとう! 'post.category.push(category1);のcategory1になるべき正確なものは? objectIDまたはsmth elseを持つStringである必要がありますか?もう1つの質問:「再水和」とは何ですか?このプロセスは何をしていますか?なぜ私はそれが必要なのですか? –

+0

実際のカテゴリモデルインスタンスである必要があります。私はrehydrateによって、Idsの代わりに実際の文書で参照を取り込むことを意味します。 –

関連する問題