0

我正在开发一个 MEAN.js 应用程序,并且我使用 Yo 生成器创建了一堆 crud-module。我创建的所有新 crud 模块都链接到主用户模块,这是有道理的,尽管我希望有一个名为“flats”的 crud 模块链接到用户模块

和我创建的其他 crud 模块,例如:“浴室”、“房间”等应该链接到“公寓”,所以让我们说登录后,在我的右上角下拉列表中,当我看到我创建的公寓列表时单击任何一个,然后顶部栏中的“浴室”和“房间”菜单项应取决于在该“公寓”下创建的房间和浴室

好奇,我将如何实现上述目标?

4

1 回答 1

1

答案从建模你的实体开始,这放置在你的猫鼬模式中,你对实体建模的方式可能会有所不同,所以你应该阅读更多关于 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 数据建模的内容,以了解最适合你。

于 2014-11-11T13:41:48.883 回答