【发布时间】:2016-06-14 08:44:45
【问题描述】:
我想在 DynamoDB 中“更新”一个文档。也就是说,我想指定一个键和一组字段/值对。如果不存在具有该键的文档,我希望使用该键和我指定的键/值对创建一个文档。如果存在带有该键的文档,我希望将我指定的字段设置为指定的值(如果这些字段之前不存在,那么应该添加它们)。现有文档中的任何其他未指定字段都应保留。
当我设置的字段/值对都是顶级字段时,我似乎可以通过 UpdateItem 调用很好地做到这一点。如果我有嵌套结构,UpdateItem 将用于设置嵌套字段,只要结构存在。也就是说,如果我现有的文档有"foo": {},那么我可以成功设置"foo.bar": 42。
但是,如果已经没有 foo 对象,我似乎无法设置 "foo.bar": 42(就像在根本没有具有指定字段的文档的情况下,我的“upsert”是表现得像一个“插入”。
几年前我在 AWS 论坛上找到了a discussion,这似乎暗示我想做的事情无法完成,但我希望这最近有所改变,或者也许有人知道一种方法吗?
【问题讨论】:
-
为了给你另一个数据点,我在 2015 年 5 月(ish)调查了这个,你提到的同样的问题仍然存在。我无法实现嵌套字段 upsert 的目标,因此我不得不改变解决问题的方法以及存储数据的方式。
-
@mkobit 感谢您的数据点;这也是我得出的结论。由于我的数据具有固定数量的嵌套级别,因此我最终将其存储为扁平化,并使用名为
foo_bar的字段,并将编组/解编组代码添加到我的 DAO 层以对其进行翻译。这是一种痛苦,但它似乎运作良好(至少到目前为止) -
一年后同样的问题。烦人的部分是 Dynamo 不会抛出错误,它只是不会保存数据树的那部分。
-
有人有解决办法吗?请在此处发布。