我正在编写一个使用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?
});
答案 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