#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
},
});