У меня есть сценарий, в котором я заполнил вложенные объекты, однако на раннем этапе сделал выбор в пользу заполнения только тех полей, которые необходимы для отображения.
Теперь я хочу добавить поле, которое я пропустил ранее, но у меня уже есть данные - Как мне обновить все существующие записи с этим новым полем.
Вот существующая структура - вы увидите, что у машины может быть несколько пакетов отделки, а я сохранил атрибуты 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" }
С тех пор я выяснил, что лучше делать это с помощью ссылки, а не встраивать данные - но у меня есть существующие данные, которые необходимо обновить, прежде чем я попытаюсь выяснить, как "раскрутить" данные