我应该如何使用MEAN堆栈来处理我的后端设计?

时间:2016-06-15 07:34:35

标签: node.js mongodb express mongoose mean-stack

这可能更多是寻求建议的情况。但是,我将提供示例代码作为我想要实现的示例。我正在尝试构建我的第一个后端系统,并且我一直遇到设计问题。

我的MongoDB数据库由4个主要部分组成 - 个人资料,团队,草稿和用户。配置文件(作为使用ID获取所有内容的主要数据)模式具有用于保存具有团队和草稿ID的数组的属性。我们的想法是,当提供配置文件时,它将使用ID在相关数据中填充所有这些属性。

使用Mongoose的Profile模式示例:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var UserProfileSchema = new Schema({
        Name : String,
        Email : String,
        Admin : Boolean,
        Status : Number,
        UserID : String,
        PrivateProfile: Boolean,
        Drafts: [String], //This array holds the draft IDs
        Teams:[String] //Holds the team profiles IDs 
    });

module.exports = mongoose.model('UserProfile', UserProfileSchema);

使用Mongoose的团队配置文件架构示例:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var TeamProfileSchema = new Schema({
        Name : String,
        CaptainID : String,
        CaptainName : String,
        Members : [String], //Array of user IDs
        DateCreated : Boolean,
        Reputation : Number
    });


module.exports = mongoose.model('TeamProfile', TeamProfileSchema);

查找用户所有团队资料的路线示例,并获取与该团队相关联的所有成员:

router.route('/teams/captain/:user_id')
.get(function (req, res) {
TeamProfile.find({
    CaptainID : req.params.user_id
}, function (err, teams) {
    if (err)
        res.send(err);

    for (var x in teams) {
        var membersArray = [];
        for (var i in teams[x].Members) {
            var ID = teams[x].Members[i];
            UserProfile.find({
                UserID : ID
            }, function (err, profile) {
                if (err)
                    res.send(err);
                membersArray.push(profile);
            });
        }
        teams[x].Members = membersArray;
        console.log(teams[x].Members);
    }
    res.json(teams);
});
})

我知道这条路线不起作用,但我该如何解决呢?我使用更多的香草方法只是为了解释我想要实现的目标。任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

我建议您使用非规范化规范化的组合。

因为 MongoDB 不是关系数据库

非规范化规范化快得多。你不再需要使用关系了。

您可以阅读 article 希望对您有所帮助。

干杯