Mondodb 更新数组内的数组嵌入mongoose/nodejs

问题描述

您好,我正在尝试更新嵌入文档中的嵌入文档。

我的“对象”看起来像这样

 {  
    _id:0,fieldOne:"f1",fieldTwo : "f2",subDocument:[
        {
            _id:0,subfieldOne:"f1",subfieldTwo:"f2",subSubDocument:[
                {
                    _id:0,sub_subfieldOne:"f1",sub_subfieldTwo:"f2"
                }
            ]
        },],}

经过一些研究,我发现如果你知道他的位置,你可以更新一个子数组项, 像这样

await Document.updateOne(
    { "subDocument._id": 0},{ $set:{"subDocument.0.subsubDocument.0.sub_subfieldOne":"tesTaroo"} });

然而,如果我像这样循环数组

for(let i = 0;i<subDocument.length;i++){
    for(let j = 0;j<subDocument[i].subSubDocument.length;j++){
     await Document.updateOne(
        { "subDocument._id": 0},{ $set:{"subDocument."+i+".subsubDocument."+j+".sub_subfieldOne":"tesTaroo"} });
    }
}

他不喜欢这样的查询中的字符串连接......有没有办法做到这一点?

解决方法

阅读您的代码后,我认为您正在尝试更新所有子文档的 sub_subfieldOne。如果是这样,您可以使用 $[] 运算符。它表示更新操作符应该修改指定数组字段中的所有元素:

await Document.updateOne(
  { "subDocument._id": 0},{ $set:{"subDocument.$[].subsubDocument.$[].sub_subfieldOne": "testaroo"} }
);