平均堆栈架构

时间:2015-03-09 14:14:33

标签: javascript node.js mongodb mongoose

我正在使用MEAN堆栈,users可以构建charts

where `user, chart` = mongoose schemas

我的问题是如何将用户创建的图表与用户本身相关联,以便在管理页面上显示过去创建的图表?

var ChartSchema = new Schema({
   name: [String],
   type: [String],
   data: [Array]
});

var UserSchema = new Schema({
  name: String,
  email: { type: String, lowercase: true },
  role: {
    type: String,
    default: 'user'
  },
  hashedPassword: String,
  provider: String,
  salt: String,
  twitter: {},
  google: {}
});

3 个答案:

答案 0 :(得分:4)

通过在ChartSchema中添加属性或在UserSchema中添加图表数组。 在两个架构上添加和_id字段。

ChartSchema = new Schema({
// ...
   _creator: { type: Number, ref: 'User' },
});

或者

UserSchema = new Schema({
// ... 
   chartsCreated: [{ type: Number, ref: 'Chart' }]
});

假设ChartSchema注册为Chart,UserSchema注册为User

答案 1 :(得分:1)

或许您可以在ChartSchema中添加一个名为created的属性,以便您可以按照发布时间显示某人的图表:

var ChartSchema = new Schema({
    created: {
      type: Date,
      default: Date.now
    },
    user: {
      type: Schema.ObjectId,
      ref: 'User'
    }
});

mongoose.model('Charts', ChartSchema);

var UserSchema = new Schema({
//    ...
    charts: [{
      type: Schema.ObjectId,
      ref: 'Charts'
    }]
});

mongoose.model('User', UserSchema);

在控制器文件中,例如:

Charts.find().sort('-created').populate('user', 'displayName').exec(function (err, charts) {
//    ...
});

要了解详情,您可以看到MEAN Stack DocsMongoose Docs

答案 2 :(得分:0)

在您的用户架构中添加新的字段chartData,您无需更改图表架构。

var UserSchema = new Schema({
      name: String,
      email: { type: String, lowercase: true },
      role: {
        type: String,
        default: 'user'
      },
      hashedPassword: String,
      provider: String,
      salt: String,
      twitter: {},
      google: {},
      chartData : [ChartSchema]
    });

并导出您的架构

mongoose.model('User',UserSchema)