关于Mongoose Schema设计的问题

Questions about Mongoose Schema design

我对 NoSQL 世界完全陌生,很难全神贯注。这周我用 Node.js 学习了 MongoDB (Mongoose),这是我当前的模式:

var eventDataSchema = new Schema({
  _id        : Number,
  notes      : {type: String, required: true},
  start_date : {type: Date, required: true},
  end_date   : {type: Date, required: true},
},  {
  id         : false,
  collection : 'event-data'
});
eventDataSchema.plugin(AutoIncrement);

var EventData = mongoose.model('EventData', eventDataSchema);

现在可以正常使用了,我想添加一个用户和密码,并获得对 EventData.

的个人访问权限

此外...稍后如果我只想发送事件数据的 JSON,而不是用户到我的 javascript,我该怎么做?

我目前以这种格式将事件数据发送到我的 js 的方式:

router.get('/data', function(req, res){
  EventData.find({}, function(err, data){
    if (err) {
      console.error('Error occured');
    }
    res.send(data);
  });
});

再次感谢

据我所知,您想在架构中添加事件键。那么你的架构将是这样的:

    var userSchema = new Schema({
        user: { type: String, required: true, trim: true },
        password: { type: String, required: true, trim: true },
        events: [{ 
             notes: { type: String,required: true, trim: true },
             start_date: { type: Date,required: true },
             end_date: { type: Date,required: true } 
            }]
    }
    userSchema.plugin(AutoIncrement);
    var userSchema = mongoose.model('userSchema', userSchema);
 });

如果上面的代码不起作用,那么您可以创建两个模式,一个用于用户,另一个用于 eventData,并可以在 userSchema 中填充您的 eventData。

所以你的代码将是这样的:

userSchema.js:

var userSchema = new Schema({
        user: { type: String, required: true, trim: true },
        password: { type: String, required: true, trim: true },
        events: {type: mongoose.Schema.Types.ObjectId, ref: 'EventData' }

    userSchema.plugin(AutoIncrement);
    module.exports = mongoose.model('userSchema', userSchema);
});

而您的 eventDataSchema 将是:

eventSchema.js:

    var eventDataSchema = new Schema({
             notes: { type: 'string',required: true, trim: true },
             start_date: { type: Date,required: true },
             end_date: { type: Date,required: true } 
    }
    eventDataSchema.plugin(AutoIncrement);
    module.exports = mongoose.model('EventData', eventDataSchema);
 });

然后你可以得到这样的结果: index.js:

var eventSchema = require('./eventSchema');
var userSchema = require('./userSchema');

var populate = [{
        path: 'events',
        model: 'EventData',
        select: '_id notes start_dat end_date'
    }];

var find = function (query) {
    return userSchema.find(query).populate(populate).exec();
}
console.log(find());

结果:

{
      _id:cfgvhbjnkmkdcfxghgjklxnmbxhdhjxjhjhgx,
      user: John Doe,
      password: 123,
      events: [ { _id: 1gfye56785g3ycgevhxeftx568765egcd,
                  notes: Event A,
                  start_date: 1/1/01, 
                  end_date: 1/1/01
                } ]

}