рассмотрим следующие модели:
const Band = new Schema({
name: String,
genre: String,
venues: [{
city: String,
venue: { type: Schema.Types.ObjectId, ref:'Venue'}
}]
});
const Venue = new Schema({
arena: String,
// Some more venue details...
});
Теперь, например, я хочу найти все полосы с genre == 'country'
, которые работают в city == 'nashville'
, и заполнить только соответствующую запись массива объектов.
Имеется в виду, что только запись массива с city == 'nashville'
(мы можем предположить, что ее только 1) будет иметь сведения о месте проведения, а все остальные записи будут иметь только ObjectId.
Редактировать: Добавлен пример (по запросу комментарии):
const bands = [
{
name: 'band-a',
genre: 'country',
venues: [
{ city: 'nashville', venue: 'objectId(a)' },
{ city: 'portland', venue: 'objectId(b)' },
]
}
];
const venues = [
{ _id: 'a', arena: 'some-arena' },
{ _id: 'b', arena: 'some-other-arena' }
]
const result = [{
name: 'band-a',
genre: 'country',
venues: [
{ city: 'nashville', venue: { _id: 'a', arena: 'some-arena' } },
{ city: 'portland', venue: 'objectId(b)' },
]
}]
Есть ли способ достичь такого рода условного населения?