我有一个场景,其中我填充了嵌套对象,但是很早就做出选择,仅填充显示所需的字段。 现在,我想添加一个我先前遗漏的字段,但是我已经有了数据-如何使用此新字段更新所有现有记录。
这是现有的结构-您将看到汽车可以有多个装饰包,并且我存储了attributeA和B-但实际的装饰包集合具有更多的属性(在...“ C”之下)
cars: {
model: string,
trims: [
trim: {
_id: ObjectId,
attributeA: string,
attributeB: string
}
]
}
trims: {
attributeA: string,
attributeB: string,
attributeC: string
}
我想在所有记录中将AttributeC添加到我的汽车收藏中。不仅添加字段,而且使用该装饰包的正确值填充字段。
任何帮助表示赞赏-我什至不知道从哪里开始,除非它可能是聚合查询
@anthony想举个例子-这是
这里是“饰物”集合-请注意,每个项目都有两个“属性”颜色和完成方式...
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"
}]
这是汽车的样本集合-带有内饰选项。 -请注意,每个(现有数据)都具有ONE属性的修剪数据...
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",
}
]
}]
当我最初写它的时候-我想将'trim'与汽车一起存储,这样我就不必查找显示内容...我没有将表面处理存储在汽车对象中。但是现在我想-因为我的用户界面已更改。
所以我想知道f有一种方法可以用'black'的base_color更新所有修剪...
trim: { base_color: "Black }
将其更新为
trim: { base_color: "Black", finish: "matte" }
此后,我发现最好使用链接而不是嵌入数据来完成此操作-但是我有需要更新的现有数据,因为我试图弄清楚如何“取消嵌套”数据