node.js - 关于 Mongoose Schema 设计的问题

标签 node.js mongoose-schema

我对 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 进行个人访问。

另外......稍后,如果我想将仅包含 eventData 的 JSON,而不是用户发送到我的 javascript,我该怎么做?

我目前以这种格式将 eventData 发送到我的 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);
 });

如果上面的代码不起作用,那么您可以创建两个架构,一个用于用户,另一个用于事件数据,并可以在用户架构中填充您的事件数据。

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

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

然后你可以得到这样的结果: 索引.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
                } ]

}

关于node.js - 关于 Mongoose Schema 设计的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45048670/

相关文章:

typescript - Mongoose 的 loadClass() 和 TypeScript

javascript - 如何以编程方式使用 certbot 启用/禁用 SSL

Android 在连接到 Socket 时出错

javascript - 整数不保存在循环/部分工作的 JS 中

python - 使用node和python读取同一文件时结果的差异

node.js - Mongoose 模式中的嵌套对象

node.js - 如何以优雅的方式在多个项目中重用 Mongoose 模型

javascript - Particles.js 在 .html 文件中有效,但在 .ejs 文件中无效

arrays - Mongo 模式,具有唯一值的字符串数组

javascript - 如何让匹配器使用日期范围的聚合?