我正在尝试使用节点js中的猫鼬从嵌套数组中删除值。 我的架构结构是这样的:
([{_id: 1,
results: [
{ item: "A", score: 5, answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ] },
{ item: "B", score: 8, answers: [ { q: 1, a: 8 }, { q: 2, a: 9 } ] }
]
},
{
_id: 2,
results: [
{ item: "C", score: 8, answers: [ { q: 1, a: 8 }, { q: 2, a: 7 } ] },
{ item: "B", score: 4, answers: [ { q: 1, a: 0 }, { q: 2, a: 8 } ] }
]
}])
我想从a为8的答案中删除值。 我的查询是
db.collection.update({"results.item":{$in:["C","B"]}},{$pull:{"results.$.answers":{a:8}}})
此查询工作正常,但仅更新一个文档。请帮忙。
我想要的输出是
([{
_id: 1,
results: [
{ item: "A", score: 5, answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ] },
{ item: "B", score: 8, answers: [ { q: 2, a: 9 } ] }
]
},
{
_id: 2,
results: [
{ item: "C", score: 8, answers: [ { q: 2, a: 7 } ] },
{ item: "B", score: 4, answers: [ { q: 1, a: 0 } ] }
]
}])
谢谢。
答案 0 :(得分:1)
单个语句需要MongoDB 3.6或更高版本的filtered positional $[<identifier>]
支持:
db.collection.updateMany(
{ "results.item": { "$in": ["C","B"] } },
{ "$pull": { "results.$[el].answers": { "a": 8 } } },
{ "arrayFilters": [{ "el.item": { "$in": ["C", "B"] } }] }
)
结果:
{
"_id" : 1,
"results" : [
{
"item" : "A",
"score" : 5,
"answers" : [
{
"q" : 1,
"a" : 4
},
{
"q" : 2,
"a" : 6
}
]
},
{
"item" : "B",
"score" : 8,
"answers" : [
{
"q" : 2,
"a" : 9
}
]
}
]
}
{
"_id" : 2,
"results" : [
{
"item" : "C",
"score" : 8,
"answers" : [
{
"q" : 2,
"a" : 7
}
]
},
{
"item" : "B",
"score" : 4,
"answers" : [
{
"q" : 1,
"a" : 0
}
]
}
]
}
答案 1 :(得分:0)
默认情况下, update()方法更新单个文档。设置 多参数更新所有符合查询条件的文档。
设置{multi: true}
或使用updateMany
参考:https://docs.mongodb.com/manual/reference/method/db.collection.update/