簡體   English   中英

使用節點 sdk 的復合主鍵更新 DynamoDB

[英]DynamoDB update with composite primary key with node sdk

我希望在 dynamoDB javascript SDK 中使用文檔客戶端的更新 function 部分。我的 dynamoDB 表有一個主分區鍵“PK”(字符串)和一個主排序鍵“SK”(字符串)。 我的理解是這意味着我的項目需要用它們的復合主鍵來標識,它是“PK”和“SK”的某種組合

我使用的是單表設計,因此示例項目看起來像

PK“比賽#2021”

SK:“郵政#5673”

作者:“用戶#2759”

文本:“Lorem ipsum”

評論數:9

我的代碼的邏輯是這樣的

const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();

exports.addComment = async (event, context, callback) => {

const params = {
    TableName: 'App', 
    Key: {
        "PK": event.PK,
        "SK": event.SK
    },       
    UpdateExpression: 'set commentNumber = :number',
    ExpressionAttributeValues: {
        ':number': event.updatedCommentCount
    }
}

try {
    var res = await dynamo.update(params).promise()
    // handleSuccess(res)
} catch(err) {
    // handleFail(err)
}

return 'success'

};

當我嘗試上面的代碼時,我收到一條錯誤消息,指出the provided key element does not match the schema

我知道我的參數中的Key鍵有問題,但文檔沒有幫助。 它表明可以使用復合鍵進行更新,並且似乎表明Key的值可以是帶有兩個鍵的 object,但這不起作用。 如何更新我的參數以使用更新 function?

我相信您必須在屬性名稱前使用# ,如下所示: ...UpdateExpression: 'set #commentNumber =:number',...

所以我遇到了類似的問題並遇到了這個線程。 最終對我有用的是通過首先創建密鑰 object 然后將其分配給 update_parameter 來設置 Key 屬性。

var update_params = {
  TableName: 'App',
};

let key = {};
key.PK = event.PK;
key.SK = event.SK;

update_params.Key = key;

update_params.UpdateExpression = UpdateExpression;
update_params.ExpressionAttributeValues = ExpressionAttributeValues;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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