这是json对象
{
"account_id":"1",
"sections":[ {
"section_name":"abc",
"labels": [{
"name": "label1",
"value": "value1"
},
{
"name": "label2",
"value": "value2"
}]
},
{
"section_name":"def",
"labels": [{
"name": "label3",
"value": "value3"
}]
}]
}
在这个json对象中,我想将def节中的label3的值从value3更改为value4。有不同的帐户,但是我在这里只列出了一个json对象。
我使用了下面的代码,但是对我来说不起作用。在这里,我传递了节名称(section),标签名称(label)和标签值(value)。
let query = {
account_id: event.accountId.toString(),
sections: {
section_name: section,
labels: {
label_name: label
}
}
};
return using(connectDatabase(), db => {
return db.collection(TABLE_NAME).updateOne(query, { $set: {
'sections.$.labels.$.value': value } });
}).then(
result => {
cb(null, responseObj(result, 200));
},
err => {
cb(responseObj(err, 500));
}
);
有人可以帮助我吗?预先感谢
答案 0 :(得分:1)
要获得预期的结果,请使用以下对嵌套对象使用arrayFilters的选项
使用ArrayFiter,$ [identfier] .section:“ def”和$ [identfier] .name:“ label3”
db.collection(TABLE_NAME).updateOne({
account_id: event.accountId.toString(),
{
"$set": {
"sections.$[elem].labels.$[label].value": value
}
},
{
"arrayFilters": [{
"elem.section_name": section
}, {
"label.name": label
}]
}
)
请参考此链接以获取更多详细信息-https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/
arrayFilters的另一个示例-How to Update Multiple Array Elements in mongodb
答案 1 :(得分:0)
更新的查询 您可以使用此查询
db.testcol.update(
{ },
{ $set: { "sections.$[element].labels.$[element1].value" : "value1New" } },
{ multi: true,
arrayFilters: [ { "element.section_name": { $eq: "abc" } }, { "element1.name": { $eq: "label1" } }]
}
)
您可以检查以下查询:其中1是数组的索引值。
db.testcol.update(
{
account_id:"1",
"sections.section_name":"def"
},
{
$set:{
"sections.1.labels.1.value":"value8"
}
}
)
如果要更新所有值,则可以使用:
db.testcol.update(
{
account_id:"1",
"sections.section_name":"def"
},
{
$set:{
"sections.$[].labels.$[].value":"value8"
}
}
)
请检查并告诉我是否已满。