平均堆栈模式

Mean stack Schema

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

where `user, chart` = mongoose schemas

我的问题是如何 link 用户自己创建的图表,以便我可以在管理页面上显示过去创建的图表?

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

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

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

或者

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

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

或者您可以在 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 Docs and Mongoose Docs

在您的用户架构中添加一个新字段 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', 用户架构)