我需要更新mongodb中嵌套数组的特定元素
我的mongodb数据如下所示。我需要匹配accessid和name值来更新状态。输入内容已更改
{"accessid" : 1627047023995, "name" : Name 09, "status" : 100 }
输入的内容可能属于任何一种类型 level
```
{
"_id" : ObjectId("60fac46ffcbf5287248460a9"),
"levelone" : [
{
"level" : [
{
"name" : "Name 01",
"status" : 5
},
{
"name" : "Name 02",
"status" : 0
},
{
"name" : "Name 03",
"status" : 0
}
],
"accessid" : "1627047023995"
},
{
"level" : [
{
"name" : "Name 09",
"status" : 5
},
{
"name" : "Name 15",
"status" : 3
}
],
"accessid" : "1627047023995"
}
],
"createdAt" : ISODate("2021-07-23T13:30:23.995Z")
}
我试图更新状态,但它只更新第一个索引值-name:name 01 status。请指导解决此问题。
collections.updateOne({
'levelone.level.accessid': accessid,
'levelone.level.name': name
}, { '$set': { 'levelone.$.level.status': status } }).exec();
1条答案
按热度按时间92dk7w1h1#
可以使用ArrayFilter位置更新,
询问
$elemMatch
筛选主文档的步骤要定义的数组过滤器
a
变量accessid
及b
对于name
```await collections.updateOne({
levelone: {
$elemMatch: {
accessid: accessid,
"level.name": name
}
}
},
{
$set: {
"levelone.$[a].level.$[b].status": status
}
},
{
arrayFilters: [
{ "a.accessid": accessid },
{ "b.name": name }
]
})