Вложенная функция заполнения соответствия использует родительское значение родительского значения вместо родительского

#mongoose #mongoose-populate

Вопрос:

Я пытаюсь оптимизировать сценарий, используя заполнение для ограничения количества вызовов.

Я обнаружил функцию заполнения соответствия из: http://thecodebarbarian.com/mongoose-5-5-static-hooks-and-populate-match-functions.html#populate-match-function

в выпуске Мангуста: https://github.com/Automattic/mongoose/blob/master/History.md#550—2019-04-08

из этого выпуска: https://github.com/Automattic/mongoose/issues/7397

Основываясь на всем этом, я пытаюсь сопоставить дату начала и окончания моей кампании с датой результата с заполнением

 let campaigns = await Campaign.find()
        .populate({
            path: "accommodationsList.accommodationId",
            populate: {
                path: "result",
                select: "_id startingDate endDate price",
                options: {sort: {_id: -1}}
            }
        }).lean();
 

работает нормально, но мне нужно добавить совпадение в последнем заполнении, как что-то:
совпадение: кампания => ({ Дата начала: кампания.Дата начала, дата окончания: кампания.Дата окончания, ошибка: ноль }),

кампания здесь представляет собой размещение, функция соответствия заполняет только родительское значение.

Поэтому мне интересно, есть ли способ передать campaign.startingDate до последнего вложенного совпадения заполнения?

 let campaigns = await Campaign.find()
            .populate({
                path: "accommodationsList.accommodationId",
                populate: {
                    path: "scrapedresult",
                    select: "_id startingDate endDate price",
                    match: campaign => ({ startingDate: campaign.startingDate, endDate: campaign.endDate }),
                    options: { sort: { _id: 1 } }
                }
            }).lean();
 

Вот мои схемы кампании:

 const accommodationWithCompetitorsSchema = new Schema(
{
    accommodationId: {
        type: Schema.ObjectId,
        ref:"accommodations",
        required: true
    }
});

const CampaignSchema = new Schema({
    accommodationsList: [
        accommodationWithCompetitorsSchema
    ],
    startingDate: {
        type: Date,
        required: true
    },
    endDate:{
        type: Date,
        required: true
    }
});
 

My accomodation one:

 const AccommodationSchema = new Schema({
    name: {
        type: String,
        required: true
    })
AccommodationSchema.virtual('result', {
    ref: 'Results',
    localField: '_id',
    foreignField: 'accommodationId',
    justOne: true
});
 

My result one

 const ResultSchema = new Schema({
    accommodationId: {
        type: Schema.ObjectId,
        required: true,
        ref: "accommodations"
    },
    price: {
        type: Number,
    },
    startingDate: {
        type: Date,
        required: true
    },
    endDate: {
        type: Date,
        required: true
    },
});