我想更新MongoDB中嵌套数组中元素的值。我所拥有的只是一个用于检查和修改其值的密钥。
{
details:{
name:"sweta",
age:"12"
},
imageNames:[
0:{
userData:[
0:{
imageName : "0_abc_0.jpg",
state:"hold"
},
1:{
imageName : "1_def_1.jpg",
state:"hold"
}
]
},
1:{
userData:[
0:{
imageName : "0_kkk_0.jpg",
state:"hold"
},
1:{
imageName : "1_jjj_1.jpg",
state:"hold"
}
]
},
]
}
let imageName = "abc.jpg"
const [name,ex] = imageName.split('.');
const regex = new RegExp(`\\d_${name}_\\d.${ex}`,"gi");
let state = 'completed';
db.update(
{
"details.name":"sweta","imageNames":{
"$elemMatch":{
"userData.imageName":{"$regex":regex}
}
}
},
{ $set: { 'imageNames.$.userData.$.state': state }}
)
我有一个名称和imageName可以过滤掉。但是我拥有的imageName是“ abc.jpg”,这就是为什么我使用正则表达式。
我想将状态“保持”更新为“完成”,那么该怎么做呢? 有人知道吗?我尝试过,但出现错误。
答案 0 :(得分:0)
如果您使用的是MongoDB版本> 3.6
,则可以使用arrayFilters
快速获得image
的正确索引:
db.users.updateOne({
'details.name': 'sweta',
'imageNames.userData.imageName': {
$regex: '_abc_'
}
}, {
$set: {
'imageNames.$[].userData.$[data].state': 'completed'
}
}, {
arrayFilters: [{
'data.imageName': {
$regex: "_abc_"
}
}]
})