Node.js 我应该如何使用平均堆栈进行后端设计?

Node.js 我应该如何使用平均堆栈进行后端设计?,node.js,mongodb,express,mongoose,mean-stack,Node.js,Mongodb,Express,Mongoose,Mean Stack,这可能更像是在寻求建议。但是,我将提供示例代码作为我想要实现的示例。我正在尝试构建我的第一个后端系统,但我一直在设计中遇到问题 我的MongoDB数据库由4个主要部分组成——概要文件、团队、草稿和用户。profile(作为使用IDs获取所有信息的主要数据)模式具有用于保存带有团队和草稿id的数组的属性。其思想是,当提供概要文件时,它将使用ID用相关数据填充所有这些属性 使用Mongoose的概要文件模式示例: var mongoose = require('mongoose'); var Sch

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

我的MongoDB数据库由4个主要部分组成——概要文件、团队、草稿和用户。profile(作为使用IDs获取所有信息的主要数据)模式具有用于保存带有团队和草稿id的数组的属性。其思想是,当提供概要文件时,它将使用ID用相关数据填充所有这些属性

使用Mongoose的概要文件模式示例:

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);
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);
使用Mongoose的团队配置文件模式示例:

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);
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);
});
})

我知道这条路线行不通,但我该怎么办?我使用了一种更普通的方法,只是为了解释我想要实现的目标。非常感谢您提供的任何帮助。

我建议您结合使用非规范化规范化

因为MongoDB不是关系数据库

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

你可以阅读这篇文章,希望能对你有所帮助


干杯

这很有帮助,谢谢。我将按照您和本文的建议尝试实现一个组合。