Как получить родителя схемы в Mongoose? - PullRequest
0 голосов
/ 16 мая 2018

Я пишу приложение Node.js, которое использует Mongoose в качестве ORM.

У меня есть одна модель, называемая 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 голосов
/ 16 мая 2018

На самом деле this.parent().id работал:

Participant.virtual('url').get(function url() {
    return `/${this.parent().id}/participants/${this.id}`;
});
0 голосов
/ 03 февраля 2019
// 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'
0 голосов
/ 16 мая 2018

У Монго нет родителей, вам нужно использовать агрегаты в вашем объекте или создавать ссылки на другую коллекцию.

или вы можете использовать поддельные документы Мангуста, см. Документацию: http://mongoosejs.com/docs/3.0.x/docs/subdocs.html

...