MongoDBのリレーション:1対数個
〜MongoDBのリレーション〜
ここで言うリレーションはデータの関連付けを指すことになります。
簡単に説明すると、あるSNSに対して、あるツーザーが投稿します。コメントがついた
り、お気に入りができたり、リツートができたりと一つのデータに対して関連性がある
ということです。
早速リレーションについて見ていきましょう。
・1対数個
これが一番シンプルです。
例えば一人のユーザーに対して複数の住所を管理してみます。(Amazonみたいな)
//スキーマ作成
const userSchema = new mongoose.Schema({
first: String,
last: String,
//住所を複数管理
addresses: [{
_id: { id: false },
country: String,
prefecture: String,
address1: String,
address2: String,
}]
});
//モデル作成
const User = mongoose.model('User', userSchema);
//ユーザーのインスタンス作成
const makeUser = async () => {
const u = new User({
first: '太郎',
last: '山田'
});
// u に対してアドレスをpushメソッドで追加する
u.addresses.push({
country: '日本',
prefecture: '北海道',
address1: '札幌市',
address2: '0丁目1番地'
});
const res = await u.save();
console.log(res);
}
これで追加することができました。
ここから既存のユーザーに住所の追加が可能です。
//既存ユーザーに対して住所の追加 idを引数で受け取る
const addAddress = async (id) => {
const user = await User.findById(id);
user.addresses.push({
country: '日本',
address2: '0丁目1番地'
});
const res = await user.save();
console.log(res);
}
addAddress('63568a540ae51fdca7fdd307');
住所の追加ができました。
数個くらいなら直接ドキュメントにいてれも大丈夫でしょみたいなニュアンスです。