mon goose Dynami c ref население в субдокументе - PullRequest
0 голосов
/ 09 июля 2020

Я хочу заполнить ObjectId в массиве вложенных документов, где вложенные документы используют динамический c ref. Т.е. у меня есть модель «Комментарий», которая ссылается на создателя, который относится к типу модели «Пользователь» или «Художник»:

const CommentSchema = new Schema({
        id: ObjectId,
        by: {
            type: ObjectId,
            refPath: 'byModel',
            required: true
        },
        byModel: {
            type: String,
            required: true,
            enum: ['User', 'Artist'],
            default: 'User'
        },
        ...
    },
);

Когда я делаю Comment.model.find({}).populate('by'), я получаю заполненное поле с eiter a Пользователь или исполнитель, как и ожидалось.

Однако теперь у меня есть модель «Лента», которая содержит массив комментариев:

const TapeSchema = new Schema(
    {
        title: {type: String, required: true, max: 500,unique: true},
        artist: { type: ObjectId, ref: 'Artist'},
        comments: [{type: ObjectId, ref: 'Comment'}],
        ...
    }
});

Теперь я хочу заполнить tape.comments.by:

const tape = await Tape.model.findById(req.params.id).populate(['comments', 'comments.by', 'tracks', 'artist'])
if(!tape)
    ... //do some exception handling
res.status(200).send(tape)
    

Это не работает. Моя лента возвращается, комментарии заполняются по желанию, byModel существует и содержит соответственно 'User' / 'Artist', но comments.by - это просто ObjectId и не заполняется.

Я уже пробовал явный выбор .select(['comments.by, comments.byModel']) без изменений.

...