我正在使用MEAN.js应用程序,并且我使用Yo生成器创建了一堆crud-module。我创建的所有新crud模块都链接到主用户模块,这是有意义的,虽然我想有一个称为' flats'链接到用户模块
和我创建的其他crud模块,例如:'浴室'房间'等应该与平面相关联#39;所以我们说在登录后,在我的右上角下拉列表中,我看到我创建的Flats列表,当我点击任何一个,然后是浴室'和'房间'顶栏中的菜单项应取决于在该平面下创建的房间和浴室
好奇,我将如何实现上述目标?
答案 0 :(得分:1)
答案从为实体建模开始,这放在您的mongoose模式中,您对实体进行建模的方式可能会有所不同,因此您应该阅读有关mongodb data modeling和mongoose模式,模型,人口的更多信息。
基本上你会有3个型号(Flat,Room,Bathroom), Room 实体应该引用 Flat 和浴室还应该参考 Flat
要在meanjs中实现这一目标,您应该拥有: app \ models 下的3个文件(flat.server.model.js,room.server.model.js,bathroom.server.model.js) ,每个文件都包含该实体的mongoose模式,因此room.server.model.js将具有mongoose模式,如:
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以获取特定的房间 持平,有点像:
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,另一种 是在查询字符串中传递它。检查此post的答案,看看你如何做到这两点。
请注意,这是一种做事方式,还有其他方法,可以让您的 Flat 文件(实体)包含所有房间和浴室文档(实体),我鼓励您进一步阅读mongodb数据建模,找出最适合您的方法。