这是我的代码:
db.getCollection("some").find({
"some": "Val"
}).forEach(doc => {
const sourceArray = doc.obj.subObj[0].subObj[0].subObj;
const target = doc.obj.subObj[0];
const old = doc.obj.subObj[0].subObj[0];
sourceArray.forEach(elem => {
elem.abc = old.abc;
elem.def = old.def;
elem.ghi = old.ghi;
});
sourceArray[1].ghi.someElem = "stringA";
sourceArray[2].ghi.someElem = "stringB";
// for some reason, all 3 array elements in sourceArray now have stringB as value for ghi.someElem
sourceArray[2].abc = [{
"de": "fg",
"gh": [
"ij"
]
}
];
// This doesn't affect the abc property of the other array elements
target.subObj = sourceArray;
db.getCollection("some").save(doc);
});
基本上,我需要用sourceArray
中的某些值覆盖old
中的元素,然后将这些元素另存为target
的子元素。这就是循环中发生的事情。但是,此后,我需要设置一些单独的值。
由于某种原因,在循环之后覆盖ghi.someElem
会为所有数组元素设置最后一个值stringB
。
它可以进一步覆盖abc
。
我想念什么?