[英]Structuring MongoDB data and mongoose queries
我試圖弄清楚如何構建我的應用程序的模型和查詢。 我正在使用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方法完成之前渲染的,因此被邀請者是空的...
任何幫助表示贊賞!
我能夠弄清楚。 使用此工作:
const displayEventDetails = (req, res, next) => {
let id = req.params.id;
Event.findById(id)
.populate('Owner')
.populate('Invites.invited')
.populate('Invites.accepted')
.populate('Invites.declined')
.exec((err, event) => {
if (err)
console.log("Error Selecting : %s ", err);
if (!event)
return res.render('404');
var invited = event.Invites.invited;
var accepted = event.Invites.accepted;
var declined = event.Invites.declined;
res.render('event_details', {
event,
invited,
accepted,
declined
});
});
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.