我有3个架构 1.用户 2. SignedToEvent 3.活动
用户包含有关用户的信息,并且与SignedToEvents有关系。 SignedToEvents将用户与事件耦合。 SignedToEvent像这样嵌套在用户内部:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const SignedToEvents = new Schema({
event : { type: Schema.Types.ObjectId, ref: 'event' },
eventSignedDate: {type : Date, default : Date.now()},
isActive : Boolean
})
SignedToEvents.set('toObject', { getters: true });
SignedToEvents.set('toJSON', { getters: true });
const UserSchema = new Schema({
email: String,
password : String,
age : Number,
sex : String,
createdAt: { type: Date, default: Date.now },
signedToEvents : [SignedToEvents]
})
UserSchema.set('toObject', { getters: true });
UserSchema.set('toJSON', { getters: true });
module.exports = mongoose.model('user', UserSchema, 'users');
事件模式看起来像这样
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const eventSchema = new Schema({
shortId : String,
name: String,
description : String,
organization : String
})
module.exports = mongoose.model('event', eventSchema, 'events');
在我的API中,我调用了User集合:
User.findOne({_id : mongoose.Types.ObjectId(req.userId)})
.select("email")
.populate("event")
.exec()
.then(docs=>{
console.log(docs)
res.status(200).send(docs.signedToEvents)
});
现在,我希望获得User,SignedToEvent和Event的聚合集合。但是事实并非如此。
它仅返回用户ID和电子邮件。
/谢谢
答案 0 :(得分:0)
解决方案是指向我的signedToEvent属性,然后使用.event到达事件模型。像这样:
User.findOne({_id : mongoose.Types.ObjectId(req.userId)})
.select("email")
.populate("signedToEvents.event")
.exec()
.then(docs=>{
console.log(docs)
res.status(200).send(docs.signedToEvents)
});