将引用放入子模式中时,Mongoose Populate返回null

时间:2018-10-15 09:01:27

标签: mongodb express mongoose

我有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和电子邮件。

/谢谢

1 个答案:

答案 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)
    });