如何使用mongodb构建数据?

时间:2014-11-15 17:28:11

标签: mongodb mongoose

请告诉我这是否是解决我问题的合适方法:

作为特许经营的经理,您可以登录。这里有您所有员工的清单。在左边说:

公司名称

存储1

  • 第1节
  • 第2节

存储2

  • 第1节
  • 第2节

所以这是一个例子

Bob的杂货店

芝加哥商店

  • 德利
  • 蔬菜
  • 结帐

纽约商店

  • 面包
  • 德利
  • 蔬菜
  • 结帐

所以目前我的想法是拥有2个型号。用户模型和公司模型。我使用的是第二种公司模型,因为如果商店名称随一个用户而变化,则需要随每个用户进行更改。然后我在用户文档中使用该公司的引用。

var CompanySchema = new Schema({
    name: {
        type: String,
    },
    store: {
        type: Array
    },
 });

我会将这些部分放在' store'属性,因为不同的商店有不同的部分。

到目前为止,我认为一切都是正确的。我的问题是如何将用户分配到商店中的特定部分。它会是user.company.store [3] .section [1]吗?如果某个部分/商店被删除,那么部分/商店的indexOf值是否会更改?人们通常如何做这样的事情?我基本上创建了与文件夹/文件目录相同的东西。

1 个答案:

答案 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内部,以简化和直接访问。

然后我会在用户架构中索引数组,以便更快地访问。

您还必须编写一些中间件来处理删除商店/部分,以确保它们也会从引用它们的任何用户中删除。