![](/img/trans.png)
[英]DynamoDB - How to create map and add attribute to it in one update
[英]How to update map property in dynamodb
我在發電機中有一個 map 具有以下結構:
participants: {
M: {
"6ecd8c99-4036-403d-bf84-cf8400f67836": {
M: {
participantUid: {
S: "6ecd8c99-4036-403d-bf84-cf8400f67836",
},
userSummary: {
M: {
userRef: {
S: "refGoesHere",
},
},
},
isRead: {
BOOL: false,
},
},
},
},
},
我正在嘗試使用以下命令更新isRead
屬性:
const updateReadStatusCommand = new UpdateCommand({
TableName: config.database,
Key: {
PK: `TASK#${taskUid}#CLIENT#${client}`,
SK: `THREAD#${uid}`,
},
UpdateExpression: `SET participants.#participantUid.isRead = :isRead`,
ExpressionAttributeNames: {
"#participantUid": userUid,
},
ExpressionAttributeValues: {
":isRead": updateBody.isRead,
},
ReturnValues: "ALL_NEW",
});
到目前為止,我一直遇到以下錯誤: The document path provided in the update expression is invalid for update
。
我很難在這里看到這個問題,因為它無法識別 map 中的屬性。 誰能指出我正確的方向?
編輯:
我還掃描了表格以確保數據格式正確,如下所示:
"participants": {
"6ecd8c99-4036-403d-bf84-cf8400f67836": {
"isRead": false,
"participantUid": "6ecd8c99-4036-403d-bf84-cf8400f67836",
"userSummary": {
"userRef": "refGoesHere"
}
}
},
我認為這沒有什么問題,我能想到的唯一一件事就是試圖改變——
UpdateExpression: `SET participants.#participantUid.isRead = :isRead`,
ExpressionAttributeNames: {
"#participantUid": userUid,
},
...
至
UpdateExpression: `SET participants.#participantUid.#isRead = :isRead`,
ExpressionAttributeNames: {
"#participantUid": userUid,
"#isRead": "isRead"
},
...
如果.isRead
被視為字符串,而不是路徑的一部分,正如我在文檔中注意到的那樣,如下例所示,使用#3str
被用作#pr.#3star
3star 而不是使用#pr.ThreeStar
直接地 -
aws dynamodb update-item \
--table-name ProductCatalog \
--key '{"Id":{"N":"789"}}' \
--update-expression "SET #pr.#5star[1] = :r5, #pr.#3star = :r3" \
--expression-attribute-names file://names.json \
--expression-attribute-values file://values.json \
--return-values ALL_NEW
(名稱.json)
{
"#pr": "ProductReviews",
"#5star": "FiveStar",
"#3star": "ThreeStar"
}
由於不正確的 SK 解決了這個問題,這意味着找不到我要更新的文檔。
查詢本身是正確的。 把這個留給任何類似 position 的人,檢查你是否真的在嘗試更新正確的東西!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.