【发布时间】:2018-09-09 07:48:52
【问题描述】:
我正在尝试弄清楚如何为我的应用构建模型和查询。我正在使用 express、mongoose 和 mongodb。
基本上,我的应用旨在用于活动(派对、锦标赛、聚会等)。我有一个用户和事件的模型。我正在努力做到这一点,以便可以邀请用户参加活动。 “邀请”将具有以下状态:“已邀请”、“已接受”、“已拒绝”。我最初的想法是有这个:
let eventSchema = new Schema({
Date:{
type: Date,
required: true
},
Title:{
type: String,
required: true
},
Description:{
type: String,
required: true
},
Owner:{
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
Invites: {
invited : [
{
type: Schema.Types.ObjectId,
ref: 'User'
}
],
accepted: [
{
type: Schema.Types.ObjectId,
ref: 'User'
}
],
declined: [
{
type: Schema.Types.ObjectId,
ref: 'User'
}
]
}
});
这是用户架构:
let userSchema = mongoose.Schema({
firstName:{
type: String,
required: true
},
lastName:{
type: String,
required: true
},
email:{
type: String,
required: true
},
type:{
type: String,
required: true
},
events:{
type: Schema.Types.ObjectId,
ref: 'events',
}
});
这是我数据库中的文档(在 mlab 中):
{
"_id": {
"$oid": "5b84adca83599470e9d95d90"
},
"Invites": {
"invited": [
{
"$oid": "5b817c2ae7179a43f9ac854e"
},
{
"$oid": "5b817c8ae7179a43f9ac8577"
}
],
"accepted": [],
"declined": []
},
"Title": "Testtttt",
"Date": {
"$date": "2018-08-29T04:00:00.000Z"
},
"Description": "testttttt",
"Owner": {
"$oid": "5b817c2ae7179a43f9ac854e"
},
"__v": 0
}
我正在尝试制作它,以便我可以显示该事件及其所有详细信息。我相信我遇到了 JS 的异步性问题。
以下是“查看”活动详细信息的功能:
const displayEventDetails = (req, res, next) => {
let id = req.params.id;
Event.findById(id)
.populate('Owner')
.exec((err, event) => {
var tmpEvent = event.toObject();
var tmpInvitees = [];
var invitees = tmpEvent.Invites.invited;
console.trace(invitees);
invitees.forEach(invitee => {
User.findById(invitee, (err, invitee) => {
tmpInvitees.push(invitee);
});
});
if (err)
console.log("Error Selecting : %s ", err);
if (!event)
return res.render('404');
// console.trace(event);
res.render('event_details',
{
event,
invitees: tmpInvitees
}
);
});
};
任何人对我如何获得它有任何想法,以便上述函数将返回事件和被邀请者?我相信它在 .forEach 方法完成之前渲染,所以被邀请者是空的......
感谢任何帮助!
【问题讨论】:
-
完整代码可以在这里找到:github.com/thanover/event_manager
标签: javascript node.js mongodb express mongoose