如何在Mongoose中获取模式的父级?

时间:2018-05-16 20:23:17

标签: node.js mongoose mongoose-schema

我正在编写一个使用Mongoose作为ORM的Node.js应用程序。

我有一个名为Event的模型和一个名为Participant的模式,它作为子文档存储在我的Event模式中。问题是,我需要实现一个应该访问父数据的方法。并且没有相关文档(或者我找不到任何文档)。如何从孩子那里访问父母的数据?

我已经看过几次$parent的用法,但它对我没用。我也使用了this.parent(),但这会导致RangeError: Maximum call stack size exceeded为我的例子。

这是我的代码示例:

const Participant = mongoose.Schema({
// description
});

const eventSchema = mongoose.Schema({
    applications: [Participant],
    // description
});

const Event = mongoose.model('Event', eventSchema);

Participant.virtual('url').get(function url() {
    // the next line causes a crash with 'Cannot get "id" of undefined'
    return `/${this.$parent.id}/participants/${this.id}`; // what should I do instead?
});

3 个答案:

答案 0 :(得分:1)

实际上this.parent().id工作了:

Participant.virtual('url').get(function url() {
    return `/${this.parent().id}/participants/${this.id}`;
});

答案 1 :(得分:0)

// creating schemas
const ParticipantSchema = mongoose.Schema({});
const EventSchema = mongoose.Schema({
    title: {type: String, default: 'New event'},
    applications: {type: [Participant], default: []},
});

// creating models
const EventModel = mongoose.model('Event', EventSchema);
const ParticipantModel = mongoose.model('Participant', ParticipantSchema);

// creating instances
const event = new EventModel();
conts participant = new ParticipantModel();

// adding participant to event
event.applications.push(participant);

//accessing event title from participant. (parent data from child object)
const child = event.applications[0];
child.parent() // 'New event'

答案 2 :(得分:-1)

Mongo没有父母,你需要在你的对象中使用聚合或者创建对另一个集合的引用。

或者您可以使用mongoose子文档,请参阅文档:http://mongoosejs.com/docs/3.0.x/docs/subdocs.html