mongooseではテーブル(コレクション)のリレーションを持つ形でデータをRDBMSのように管理できます。
[リレーションのイメージ]
[モデルの定義]
// グールプというコレクション var GroupSchema = new mongoose.Schema({ name : String, member : [MemberSchema] //memberスキーマとのリンク },{collection: 'group'}); exports.Group = db.model('Group', GroupSchema); // グールプのメンバー情報というコレクション(グループの組み込みドキュメント) var MemberSchema = new mongoose.Schema({ email : String, role : { type: Schema.Types.ObjectId, ref: 'Role'} //roleとジョインする旨の定義(実際roleエントリの_idが入る },{collection: 'member'}); exports.Member = db.model('Member', MemberSchema); // メンバーの権限を保持しているロールコレクション var RoleSchema = new mongoose.Schema({ name : String, auth : String },{collection: 'role'}); exports.Role = db.model('Role', RoleSchema);
find、populationの仕方
Group.findOne({ "_id": req.body.id }, function(err, group){ if(err){ console.log(err); }else{ var options = { path : 'member.role', model : 'Role' }; Member.populate(group,options,function(err,group_with_members_role){ if(err){ console.log(err); }else{ res.send(group_with_members_role); } }); } });