问题描述
您好,我正在尝试更新嵌入文档中的嵌入文档。
我的“对象”看起来像这样
{
_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"} }
);