在java中的以下代码中,我试图将一个项“test.com”附加到名为“daily”的Map字段中。当我运行此代码时,它只是为Map添加了一个重复的密钥。
Map<String,String> atrVal = new HashMap<String,String>();
atrVal.put("test.com", json);
UpdateItemSpec updateItemSpec = new UpdateItemSpec()
.withPrimaryKey("id", Id)
.withUpdateExpression("set daily = list_append(daily , :r)")
.withConditionExpression("attribute_not_exists (daily.#k1)")
.withValueMap(new ValueMap()
.withList(":r", Arrays.asList(atrVal))
)
.withNameMap(new NameMap()
.with("#k1", "test.com"));
table.updateItem(updateItemSpec);
attribute_not_exists
应该阻止它这样做。任何想法,为什么它不工作。
答案 0 :(得分:1)
由于MAP
中有LIST
,因此API需要列表的索引(如下所示)。在Java术语中,每日的数据类型为List<Map<String, String>>
。
当你只说“daily.stringvalue”(即每日。“test.com”)时,它找不到String值,因为LIST中存在一个对象(即MAP),而不仅仅是一个STRING值
"attribute_not_exists (daily[0].#k1)"
当给出索引时,它会搜索第一个元素中的键。
如果列表是List<String>
,则可以选择使用CONTAINS
。但是,由于模型的复杂性,它无法使用。
列表支持CONTAINS:评估“a CONTAINS b”时,“a” 可以是一个清单;但是,“b”不能是集合,地图或列表。