[英]How to update document in an object in an array in an object in an array using MongoDB?
[英]In MongoDB, how to Update an Array in an Object in a Document
我的文檔在 MongoDB 中如下所示:
{
"_id": {
"$oid": "6099d057b769cc513025fd54"
},
"key_name": "I_CAN_MATCH",
"object_1": {
"sub_object_array_1": [{
"a": "TZNNI",
"b": "R"
}],
"sub_object_array_2": [{
"c": "SDLYA",
"d": "N"
}, {
"c": "KTSMQ",
"d": "N"
}],
"sub_object_array_3": [{
"e": "KYCT0",
"f": "F"
}, {
"e": "KYCT1",
"f": "N"
}, {
"e": "KYCT2",
"f": "F"
}, {
"e": "KYCT3",
"f": "E"
}],
},
"object_2": {
"sub_object_4": { "and": "so on ..." }
},
"object_array_1": [{
"g": "KYCT0",
"h": "F"
}, {
"g": "KYCT1",
"h": "N"
}, {
"g": "KYCT2",
"h": "F"
}, {
"g": "KYCT3",
"h": "E"
}]
}
我的問題是如何更新數組sub_object_array_3其中f = "F" 到f = "U"?
以下對我不起作用:
await db_model.updateMany(
{ key_name: "I_CAN_MATCH" },
{ $set: { "object_1.sub_object_array_3.$[array_element].f": "U" } },
{ arrayFilters: [ { "array_element.f": "F" } ] } );
但以下是。 所以我理解語法在這種情況下是如何工作的。
await db_model.updateMany(
{ key_name: "I_CAN_MATCH" },
{ $set: { "object_array_1.$[array_element].h": "U" } },
{ arrayFilters: [ { "array_element.h": "F" } ] } );
當數組首先位於 Object 內時,我只是不知道我在$set命令中缺少什么。
我已經搜索過了,但是我使用的每個搜索詞都指向 arrays 中的 arrays,這里不是這種情況。 有人可以幫助我嗎?
提前致謝!
錯誤- https://mongoplayground.net/p/Cvfc6oNyhrH
fail to run update: multiple write errors: [{write errors: [{Error parsing array filter :: caused by :: The top-level field name must be an alphanumeric string beginning with a lowercase letter, found 'array_element'}]}, {<nil>}]
解決方案:-
將array_element
更改為arrayElement
或不帶_
的任何內容
注意:- 它應該是alphanumeric
https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/
必須以小寫字母開頭並且僅包含字母數字字符。
演示 - https://mongoplayground.net/p/GJku1bFaj3m
db.collection.update({
key_name: "I_CAN_MATCH"
},
{
$set: {
"object_1.sub_object_array_3.$[arrayElement].f": "U"
}
},
{
arrayFilters: [
{ "arrayElement.f": "F" }
]
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.