簡體   English   中英

如何在 dynamodb 中更新 map 屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM