Reading through the docs,AWS似乎想象您以某种方式知道要更新的地图的索引编号。这很奇怪,因为他们甚至不使用他们界面中的数字。
我有这个对象:
let zoo = {
camels: 562
}
我想将它添加到我的项目中:
{
Key: { id: id },
TableName: tableName,
UpdateExpression:
'SET #z = :z',
ExpressionAttributeNames: {
'#z': 'zoo'
},
ExpressionAttributeValues: {
':z': zoo
}
}
到目前为止一切顺利。现在我已经获得了一个新项目以附加到列表中。它可能不止一个:
let zoo = {
elephants: 126,
tigers: 89
}
然后我的目标是让我的zoo
地图看起来像这样:
{
camels: 562,
elephants: 126,
tigers: 89
}
但是,我无法弄清楚如何在没有ID的情况下附加到地图。
我看到有人使用这个:
'SET #z = #z + :z'
但这根本不起作用(Incorrect operand type for operator or function; operator or function: +, operand type: M
)。
AWS的文档建议我可以这样做:
'SET #z.#animal = :animal'
然后我可以遍历我的对象并生成一个可以工作的SET
字符串。但是,这只是我正在尝试做的一个基本的例子。我希望能够添加这样的东西:
let zoo = {
aquatics: {
penguins: 988,
tropical_fish: 1943
},
mammals: {
elephants: 126,
tigers: 89
}
}
我当然可以首先获取该项目,在JavaScript中合并地图,然后再将其发回 - 但我正在努力避免发出读/写请求。
答案 0 :(得分:1)
你能使用ADD吗?
{
Key: { id: id },
TableName: tableName,
UpdateExpression:
'ADD #z = :z',
ExpressionAttributeNames: {
'#z': 'zoo'
},
ExpressionAttributeValues: {
":z": "L": ["M": {"Elephants": {"N": 126}}]
}
}
如果属性是一个集合,并且您要添加的值也是一个集合, 然后将值附加到现有集合。
我认为这里的关键是你要添加的价值必须是一套。我是否认为你有一张地图清单?在这种情况下,添加包含一个地图的地图列表。