Node.js 关于猫鼬图式设计的几个问题
我对NoSQL的世界是完全陌生的,很难把我的心思放在它上面。本周,我学习了Node.js中的MongoDB(Mongoose),下面是我当前的模式:Node.js 关于猫鼬图式设计的几个问题,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: Dat
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
还有。。。稍后,如果我只想向我的javascript发送eventData的JSON,而不想向用户发送JSON,我该怎么做
我当前以以下格式将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);
});
如果上述代码不起作用,则可以创建两个架构,一个用于用户,另一个用于eventData,并可以在userSchema中填充eventData。
因此,您的代码如下所示:
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);
});
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);
});
{
_id:cfgvhbjnkmkdcfxghgjklxnmbxhdhjxjhjhgx,
user: John Doe,
password: 123,
events: [ { _id: 1gfye56785g3ycgevhxeftx568765egcd,
notes: Event A,
start_date: 1/1/01,
end_date: 1/1/01
} ]
}
您的事件数据模式将是:
eventSchema.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);
});
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);
});
{
_id:cfgvhbjnkmkdcfxghgjklxnmbxhdhjxjhjhgx,
user: John Doe,
password: 123,
events: [ { _id: 1gfye56785g3ycgevhxeftx568765egcd,
notes: Event A,
start_date: 1/1/01,
end_date: 1/1/01
} ]
}
然后你可以得到这样的结果:
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());
结果:
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);
});
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);
});
{
_id:cfgvhbjnkmkdcfxghgjklxnmbxhdhjxjhjhgx,
user: John Doe,
password: 123,
events: [ { _id: 1gfye56785g3ycgevhxeftx568765egcd,
notes: Event A,
start_date: 1/1/01,
end_date: 1/1/01
} ]
}
你能说得更具体一点吗?当然。。。我想在这个模式中实现一个用于身份验证的用户和密码,但在这个模式中,我还希望有许多eventData块。示例:用户:John Doe密码:123个事件:[{id:1注意:事件A开始日期:1/1/01,结束日期:1/1/01,},{id:2注意:事件B开始日期:1/2/01,结束日期:1/2/01,},{id:3注意:事件C开始日期:1/3/01,结束日期:1/3/01,}]John Doe将注册并访问其事件A,B和C。虽然可能有另一个用户具有不同的事件集合谢谢,先生。这就是我一直在努力理解的,但看到你的例子,现在就更有意义了。Welcome@user258813