Пн goose - заполнять только те элементы массива, которые удовлетворяют условию - PullRequest
0 голосов
/ 19 февраля 2020

рассмотрим следующие модели:

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)' },
    ]  
}]

Есть ли способ достичь такого рода условного населения?

...