Chciałbym "uzupełnić" dokument w DynamoDB. To znaczy, chciałbym podać klucz i zestaw par pola/wartości. Jeśli nie istnieje żaden dokument z tym kluczem, nie będę go tworzyć z tym kluczem i podanymi parami klucz/wartość. Jeśli istnieje dokument z tym kluczem, chcę, aby określone przeze mnie pola były ustawione na określone wartości (jeśli te pola wcześniej nie istniały, należy je dodać). Wszelkie inne, nieokreślone pola w istniejącym dokumencie należy pozostawić w spokoju.Czy można zagnieżdżać pola zagnieżdżone w DynamoDB?
Wygląda na to, że mogę to zrobić całkiem dobrze z rozmową UpdateItem
, gdy ustawione pary pól/wartości są polami najwyższego poziomu. Jeśli mam struktury zagnieżdżone, UpdateItem
będzie działało, aby ustawić zagnieżdżone pola, o ile struktura istnieje. Innymi słowy, jeśli mój istniejący dokument ma numer "foo": {}
, mogę pomyślnie ustawić "foo.bar": 42
.
Jednak nie wydaje mi się, aby ustawić "foo.bar": 42
, jeśli nie ma już obiektu foo
(jak w przypadku, gdy w ogóle nie ma dokumentu z określonym polem, a mój "upsert" zachowuje się jak "wstaw"
Znalazłem a discussion na forach AWS sprzed kilku lat, co wydaje się sugerować, że to, co chcę zrobić, nie może być zrobione, ale mam nadzieję, że to się ostatnio zmieniło, a może ktoś wie o sposób to zrobić:
Aby dać kolejny DATAPOINT, spojrzałem to w maju 2015 (ish) i ten sam problem, o którym wspomniałeś, nadal istniał. Nie byłem w stanie osiągnąć celu zagnieżdżonego pola, więc musiałem zmienić podejście do problemu i sposobu przechowywania danych. – mkobit
@kkobit dzięki za twój punkt danych; to jest też wniosek, do którego doszedłem. Ponieważ moje dane miały ustaloną liczbę poziomów zagnieżdżonych, w końcu zapisałem je spłaszczone, z polami o nazwie 'foo_bar', a następnie dodałem kod marshalling/unmarshalling do mojej warstwy DAO, aby je przetłumaczyć. To jest ból, ale wydaje się, że działa wystarczająco dobrze (przynajmniej na razie). – pkaeding
Ten sam numer rok później. Denerwujące jest to, że Dynamo nie rzuca błędu, po prostu nie zapisuje tej części drzewa danych. – Jelling