Я хотел бы «обновить» документ в DynamoDB. То есть, я хотел бы указать ключ и набор пар полей/значений. Если с этим ключом не существует документа, я бы не создал его с указанным ключом/парами значений/значений. Если документ существует с этим ключом, я хочу, чтобы указанные мной поля были установлены на указанные значения (если эти поля ранее не существовали, то они должны быть добавлены). Любые другие неопределенные поля в существующем документе должны быть оставлены в покое.Возможно ли воссоздать вложенные поля в DynamoDB?
Похоже, что я могу сделать это довольно хорошо с вызовом UpdateItem
, когда полями/значениями, которые я устанавливаю, являются все поля верхнего уровня. Если у меня есть вложенные структуры, то UpdateItem
будет работать, чтобы установить вложенные поля, если структура существует. Другими словами, если мой существующий документ имеет "foo": {}
, то я могу установить "foo.bar": 42
успешно.
Однако, похоже, я не могу установить "foo.bar": 42
, если объект foo
отсутствует (как в случае, когда документ с указанным полем вообще отсутствует, и мой «upsert» ведет себя как «вставить».
Я нашел a discussion на форумах AWS несколько лет назад, что, похоже, подразумевает, что то, что я хочу сделать, не может быть сделано, но я надеюсь, что это изменилось недавно, или, может быть, кто-то знает о способ сделать это?
Чтобы дать вам еще один Datapoint, я посмотрел в это в мае 2015 года (иш), и та же проблема, о которой вы говорили, все еще существует. Я не смог достичь цели вложенного поля, поэтому мне пришлось изменить свой подход к проблеме и как я сохранил данные. – mkobit
@mkobit спасибо за вашу точку данных; это и заключение, к которому я пришел. Поскольку у моих данных было фиксированное количество вложенных уровней, я закончил тем, что сохранил его сплюснутым, с полями, называемыми 'foo_bar', и я добавил маршаллинг/unmarshalling код на мой уровень DAO для его перевода. Это боль, но, похоже, она работает достаточно хорошо (по крайней мере) – pkaeding
Тот же выпуск через год. Досадной частью является то, что Dynamo не выдает ошибку, она просто не сохраняет эту часть дерева данных. – Jelling