答案从建模你的实体开始,这放置在你的猫鼬模式中,你对实体建模的方式可能会有所不同,所以你应该阅读更多关于 mongodb 数据建模和猫鼬模式、模型、人口的信息。
基本上你会有 3 个模型(平面、房间、浴室),房间实体应该引用平面,浴室也应该引用平面
要在 meanjs 中实现这一点,您应该在app\models下拥有 3 个文件(flat.server.model.js、room.server.model.js、bath.server.model.js),每个文件都包含该实体的猫鼬模式,因此 room.server.model.js 将具有猫鼬模式,例如:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var RoomSchema = new Schema({
name: String,
order: {
type: Number
},
_flat:{
type:String,
ref:'Flat' //refers to the Flat model, should be populated with _id of the Flat entity
}
});
现在,当创建一个新的 Room 实体时,您应该添加公寓的 _id,如下所示:
var room=new Room({name: 'living', _flat:'123165464' /*_id of a flat entity*/});
//or:
var room=new Room();
room._flat='123165464'; //_id of a flat entity
要检索平面房间,您应该在服务器控制器 (app\controllers\room.server.controller.js) 中有一个函数,该函数可以查询 mongodb 以获取特定Flat的Room,例如:
exports.roomsByFlat= function(req, res) {Room.find({'_flat':'35415453'/*_id of a flat entity*/}).exec(function(err, rooms) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.jsonp(rooms);
}
});
};
但是这个函数有 flat._id 静态的,所以我们必须将 flat._id 传递给它,我知道有两种方法,一种是定义一个带有参数的路由来保存 flat._id ,另一种是传递它在查询字符串中。检查这个帖子的答案,看看你怎么能做到这两点。
请注意,这是一种处理方式,还有其他方式,您可以让您的平面文档(实体)包含所有房间和浴室文档(实体),我鼓励您进一步阅读有关 mongodb 数据建模的内容,以了解最适合你。