MongoDB добавление полей во вложенный объект в коллекции - PullRequest
0 голосов
/ 12 января 2019

У меня есть сценарий, в котором я заполнил вложенные объекты, однако на раннем этапе сделал выбор в пользу заполнения только тех полей, которые необходимы для отображения. Теперь я хочу добавить поле, которое я пропустил ранее, но у меня уже есть данные - Как мне обновить все существующие записи с этим новым полем.

Вот существующая структура - вы увидите, что у машины может быть несколько пакетов отделки, а я сохранил атрибуты A и B - но фактическая коллекция пакетов отделки имеет больше атрибутов (ниже ... "C")

cars: {
    model: string,
    trims: [
        trim: {
            _id: ObjectId,
            attributeA: string,
            attributeB: string
        }
    ]
}


trims: {
    attributeA: string,
    attributeB: string,
    attributeC: string
}

Я хочу добавить AttributeC в мою коллекцию автомобилей - во всех записях. Не только добавьте поля, но и заполните правильное значение для этого пакета отделки.

Любая помощь приветствуется - я даже не знаю, с чего начать, но, вероятно, это будет запрос агрегации

@ Энтони хотел пример - вот он:

Вот коллекция 'trims' - обратите внимание, что у каждого элемента есть два цвета атрибутов и отделка ...

trims: [{
    _id: 1,
    base_color: "Black",
    finish: "matte"
},{
    _id: 2,
    base_color: "Red",
    finish: "matte"
},{
    _id: 3,
    trim_color: "Black"
    finish: "matte"
},{    
    _id: 4,
    trim_color: "White"  
    finish: "gloss"
},{    
    _id: 5,
    wheel_color: "Black"
    finish: "matte"
}]

Вот образец коллекции автомобилей - с вариантами отделки салона. -Примечание каждого (существующих данных) имеет данные обрезки с одним атрибутом ...

cars: [{
    model: "Model A",
    trims: [
        trim: {
            _id: "abc111",
            base_color: "Black",
        }
        ,trim: {
            _id: "abc112",
            trim_color: "Black",
        }
        ,trim: {
            _id: "abc113",
            wheel_color: "Black",
        }
    ]
},{
    model: "Model B",
    trims: [
        trim: {
            _id: "abc222",
            base_color: "Red",
        }
        ,trim: {
            _id: "abc223",
            trim_color: "White",
        }
        ,trim: {
            _id: "abc224",
            wheel_color: "Blue",
        }
    ]
},{
    model: "Model T",
    trims: [
        trim: {
            _id: "abc333",
            base_color: "Black",
        }
        ,trim: {
            _id: "abc332",
            trim_color: "Black",
        }
        ,trim: {
            _id: "abc334",
            wheel_color: "Black",
        }
    ]
}]

Когда я первоначально написал это - я хотел сохранить «отделку» вместе с автомобилем, чтобы мне не пришлось искать дисплей ... Я не сохранял отделку в объекте автомобиля. Но теперь я хочу - потому что мой интерфейс изменился.

Так что я хочу знать, есть ли способ ОБНОВИТЬ все обрезки с base_color 'black' ...

trim: { base_color: "Black }

обновить его до

trim: { base_color: "Black", finish: "matte" }

С тех пор я выяснил, что лучше делать это с помощью ссылки, а не встраивать данные - но у меня есть существующие данные, которые необходимо обновить, прежде чем я попытаюсь выяснить, как "раскрутить" данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...