Wydaje mi się, że mam problem z dostępem do zawartości tablicy zagnieżdżonej w tablicy w dokumencie mongodb. Nie mam żadnych problemów z dostępem do pierwszej tablicy „grupy” z kwerendy jak poniżej ...MongoDB: aktualizowanie tablicy w tablicy
db.orgs.update({_id: org_id, "groups._id": group_id} , {$set: {"groups.$.name": "new_name"}});
Gdzie napotkasz problem jest gdy próbuję zmodyfikować właściwości elementu w tablicy „features” zagnieżdżone tablica "grupa".
Oto czego przykładem dokument wygląda
{
"_id" : "v5y8nggzpja5Pa7YS",
"name" : "Example",
"display_name" : "EX1",
"groups" : [
{
"_id" : "s86CbNBdqJnQ5NWaB",
"name" : "Group1",
"display_name" : "G1",
"features" : [
{
_id : "bNQ5Bs8BWqJn6CdNa"
type : "blog",
name : "[blog name]"
owner_id : "ga5YgvP5yza7pj8nS"
},
]
},
]
},
I to jest kwerenda Próbuję użyć.
db.orgs.update({_id: "v5y8nggzpja5Pa7YS", "groups._id": "qBX3KDrtMeJGvZWXZ", "groups.features._id":"bNQ5Bs8BWqJn6CdNa" }, {$set: {"groups.$.features.$.name":"New Blog Name"}});
Zwraca z komunikatem o błędzie:
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 2,
"errmsg" : "Too many positional (i.e. '$') elements found in path 'groups.$.features.$.name'"
}
})
Wydaje się, że Mongo nie obsługuje modyfikując tablice zagnieżdżone w tablicach za pomocą elementu pozycyjnego?
Czy istnieje sposób modyfikacji tej tablicy bez wyjmowania całej rzeczy, modyfikowania jej, a następnie ponownego wprowadzania? Czy w przypadku takiego zagnieżdżania jak zwykle standardową praktyką jest tworzenie nowej kolekcji? (Nawet jeśli dane są potrzebne tylko wtedy, gdy dane podstawowe są potrzebne) Czy powinienem zmienić strukturę dokumentu, aby druga zagnieżdżona tablica była obiektem i uzyskać do niego dostęp za pomocą klucza? (Jeżeli klucz jest liczbą całkowitą, która może działać jako „_id”)
groups.$.features.[KEY].name
co jest uważane za „poprawny” sposób to zrobić?