mongoDB脚本:对一个数组元素的更改传播到所有数组元素

时间:2019-01-28 16:03:31

标签: javascript mongodb

这是我的代码:

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

我想念什么?

0 个答案:

没有答案