使用node js更新mongodb中的嵌套数组

67up9zun  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(286)

我需要更新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();

92dk7w1h

92dk7w1h1#

可以使用ArrayFilter位置更新,
询问 $elemMatch 筛选主文档的步骤
要定义的数组过滤器 a 变量 accessidb 对于 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 }
]
})

操场

相关问题