我对 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/