まず、内部データとは、MongoDBのコレクション内の別のドキュメントへの参照を指します。例えば、ユーザーと投稿という2つのコレクションがある場合、ユーザーが投稿した記事の情報をユーザーのドキュメントに内部的に格納することができます。この場合、投稿のデータはユーザーのドキュメント内に埋め込まれる形となります。
条件付きポピュレーションを行うためには、次の手順を実行します。
- Mongooseのモデルを定義します。ユーザーと投稿のモデルを作成し、関連付けを定義します。
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
// 投稿への参照を格納するフィールド
posts: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }]
});
const postSchema = new mongoose.Schema({
title: String,
content: String
});
const User = mongoose.model('User', userSchema);
const Post = mongoose.model('Post', postSchema);
- データを作成します。ユーザーと投稿のインスタンスを作成し、関連付けを行います。
const user = new User({ name: 'John' });
const post1 = new Post({ title: 'First Post', content: 'Hello World!' });
const post2 = new Post({ title: 'Second Post', content: 'How are you?' });
user.posts.push(post1);
user.posts.push(post2);
user.save((err) => {
if (err) {
console.error(err);
}
});
- ポピュレーションを行います。条件を指定して関連付けられたデータを取得します。
上記の例では、ユーザー名が 'John' のユーザーの投稿のうち、タイトルが 'First Post' の投稿のみを取得しています。ポピュレーションは、ユーザーのドキュメント内の 'posts' フィールドを参照し、関連する投稿のデータを取得する役割を果たします。
このように、Mongooseを使用して内部データの条件付きポピュレーションを行うことができます。これにより、関連データの取得やクエリの制御が容易になります。