请告诉我这是否是解决我问题的合适方法:
作为特许经营的经理,您可以登录。这里有您所有员工的清单。在左边说:
公司名称
存储1
存储2
所以这是一个例子
Bob的杂货店
芝加哥商店
纽约商店
所以目前我的想法是拥有2个型号。用户模型和公司模型。我使用的是第二种公司模型,因为如果商店名称随一个用户而变化,则需要随每个用户进行更改。然后我在用户文档中使用该公司的引用。
var CompanySchema = new Schema({
name: {
type: String,
},
store: {
type: Array
},
});
我会将这些部分放在' store'属性,因为不同的商店有不同的部分。
到目前为止,我认为一切都是正确的。我的问题是如何将用户分配到商店中的特定部分。它会是user.company.store [3] .section [1]吗?如果某个部分/商店被删除,那么部分/商店的indexOf值是否会更改?人们通常如何做这样的事情?我基本上创建了与文件夹/文件目录相同的东西。
答案 0 :(得分:1)
我这样做:
架构:
var UserSchema = new Schema({
name: { type: String },
company: type: Schema.Types.ObjectId, ref: 'Company',
stores: [{type: Schema.Types.ObjectId, ref: 'Store'}]
sections: [{type: Schema.Types.ObjectId, ref: 'Sections'}]
})
var CompanySchema = new Schema({
name: {
type: String,
},
store:{type: Schema.Types.ObjectId, ref: 'Store'}
});
var StoreSchema = new Schema({
name: {
type: String,
},
sections: [{type: Schema.Types.ObjectId, ref: 'Section'}]
});
var SectionSchema = new Schema({
name: {
type: String,
}
});
" ref"中的值key是相应Model的名称。因此,CompanySchema有相应的公司模式。
实际存储对象ID的好处是你现在可以使用'填充'获取引用对象。
我正在存储"部分"直接在UserSchema内部,以简化和直接访问。
然后我会在用户架构中索引数组,以便更快地访问。
您还必须编写一些中间件来处理删除商店/部分,以确保它们也会从引用它们的任何用户中删除。