Mongodb:我应该在具有eCommerce + CMS之类功能的大型应用中使用基于参考的关系或嵌入式文档关系吗?

时间:2018-10-29 10:45:30

标签: node.js mongodb mongoose angular6 mongoose-schema

提供任务

我的一位客户需要构建自己的公司网站+内置电子商务来销售产品页面中列出的产品以及管理仪表板,该仪表板具有以下堆栈Angular 6,使用Express和mongoDd的带有Nodejs的REST Api。  网站模板:look template structure

网站的构建应使客户端可以更改网站上显示的数据,例如滑块图像,每个标题和每个描述文本,仪表板上横幅中的背景图像。 网站和仪表板中也都有产品列表,购物车和在线支付

我的方法:

使用3个模块创建了一个angular 6项目

  • 视图模块,该模块具有处理主页,关于我们,解决方案,支持,联系人,产品,职业等的页面

  • 仪表板模块:与管理员登录和内容编辑有关的所有组件

  • 共享模块:共享组件

我的问题出在REST Api

对于如何为如此庞大的应用程序创建猫鼬模式感到困惑,我应该为每个页面数据建模以使其具有嵌入文档的单个模式还是应该基于引用的关系?

例如,我在支持页面中的架构之一如下

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


const regulatoryPartnerSchema = new Schema({
    name: {
        type: String,
        required: true,
    },
    image: {
        type : String,
        required : true
    }
});

const supportLocationSchema = new Schema({
    title: {
        type: String,
        required: true,
    },
    email: {
        type : String,
        required : true
    }
});


//create a schema
const supportSchema = new Schema({
        contact: {
            title: {
                type: String,
                required: true,
                uppercase : true
            },
            description: {
                type : String,
                required : true
            },
            location: [ supportLocationSchema ]
        },
        certification_support: {
            title: {
                type: String,
                required: true,
                uppercase : true
            }, 
            description: {
                type: String,
                required: true,
            }
        },
        regulatory_partners: {
            title: {
                type: String,
                required: true,
                uppercase : true
            }, 
            description: {
                type: String,
                required: true,
            },
            partners: [regulatoryPartnerSchema]
        },
        solution_consulting: {
            title: {
                type: String,
                required: true,
                uppercase : true
            }, 
            description: {
                type: String,
                required: true,
            },
            solution_list: {
                type : [String],
                required : true
            }
        },

});



//create model
const SupportPage = mongoose.model('supportPage', supportSchema);

// export the model
module.exports = SupportPage;

如您所见,我已经为支持页面创建了一个架构,其中页面中的所有数据都成为具有嵌入式文档的单个架构

我应该使用这种方法还是应该采用混合方法,尤其是在为诸如主页,关于我们,支持,联系方式,解决方案,职业等主视图页面创建架构时?

由于我必须从仪表板更新这些数据,因此我担心采用嵌入式方法会在更新文档时出现问题

请帮助我提供您的建议

注意:创建模式的困惑仅针对于主页,关于,联系方式,解决方案,职业等查看页面。

0 个答案:

没有答案