let collection = await Collection.findOne({ 'works._id': req.params.id }).populate('works.0.photo');
Этот код будет заполнять субдок work
в индексе 0, однако я хочу, чтобы он заполнил индекс, соответствующий req.params.id
.
Я хочу что-то вроде .populate('works.i.photo')
, где i
представляет индекс работы, который содержит _id
, который соответствует req.params.id
.
Я понял, как это сделать, но я уверен, что есть лучший способ.
let collection = await Collection.findOne({ 'works._id': req.params.id });
const idx = collection.works.findIndex(work => work._id == req.params.id);
collection = await collection.populate(`works.${idx}.photo`).execPopulate();
Это не похоже на предполагаемый способ сделать это. Можно ли сделать это без итерации, чтобы найти индекс? Желательно только с одним выполнением запроса.