2016-11-28 42 views
0

我是一個Node.js的服務器爲我創建了一個遊戲的工作。服務器充當api來檢索包括個人高分在內的用戶帳戶信息。我爲每個帳戶都有一個單獨的項目,其中包含他們的用戶名和他們的遊戲分數列表。我似乎無法找到任何示例代碼將值插入到DynamoDB的列表中,我希望有人能幫助我。我沒有找到有關此特定操作的文檔。我只是試圖使用putitem函數,我知道它用於插入字符串和其他數據類型,但我沒有插入列表數據類型的運氣。我最近在這樣的嘗試看起來如下:的Node.js:如何使用putitem添加整數列出瓦特/ DynamoDB

var params = { 
    TableName : "userscores", 
    Item:{ 
     "username" : {"S": username}, 
     "scores" : {"L": {"S": score}} 
    } 
} 
dynamodb.putItem(params, function(err, data) { 
    if(err) 
     console.log(err); 
    else 
     console.log(JSON.stringify(data)); 
}); 

錯誤看起來是這樣的: {[InvalidParameterType:預期params.Item [「分數」] L到一個數組] 消息:「預期L成爲一個陣列', 代碼:'InvalidParameterType'

我明白爲什麼這個塊不起作用,但我不明白如何做到這一點。 任何幫助將不勝感激!

回答

0
let data = { 
    "username" : "name", 
    "scores" : ["val1", "val2"] 
}; 
let attrs=toAttributes(data); 

dynamodb.putItem({ 
    TableName: "underscored", 
    Item: attrs, 
    // not needed for you example, just some extra info 
    ConditionExpression: 'attribute_not_exists(#id)', 
    ExpressionAttributeNames: {'#id': '<aUniqueColumnNameIfYouUse>'} 
}); 

toAttributes = obj => { 
    return Object.keys(obj).reduce((prevResult, sKey)=> { 
    prevResult[sKey] = getAttributeFromValue(obj[sKey]); 
    return prevResult 
    }, {}); 
}; 

getAttributeFromValue = value => { 
    var type = typeof value; 

    if (type === "string") { 
    return { S: value }; 

    } else if (type === "number") { 
    return { N: value.toString() }; 

    } else if (type === "boolean") { 
    return { BOOL: value }; 

    } else if (value.constructor === Array) { 
    var array = value.map(function(element) { 
     return getAttributeFromValue(element); 
    }); 
    return { L: array } 

    } else if (type === "object" && value !== null) { 
    var map = {}; 
    for (var key in value) { 
     map[key] = getAttributeFromValue(value[key]); 
    } 
    return { M: map } 

    } else { 
    return null 
    } 
} 
0

可以更改分數值是這樣的: -

如果分數被定義爲字符串變量: -

var scores = "s1"; 
var params = { 
    TableName : "userscores", 
    Item:{ 
     "username" : {"S": username}, 
     "scores" : [scores] 
    } 
} 

如果分數被定義爲陣列: -

var scores = ["s1"]; 
var params = { 
    TableName : "userscores", 
    Item:{ 
     "username" : {"S": username}, 
     "scores" : scores 
    } 
} 
+0

我試過的THI的第一個版本解決方案,並得到一個錯誤。我的確在嘗試將一個分數變量添加到dynamodb列表中。當我嘗試這個時,我得到的錯誤:{[UnexpectedParameter:在params.Item ['scores']中找到的意外鍵'0'] 消息:'paranex.Item [\'scores \'中找到'意外鍵\'0' 「]」, 代碼:「UnexpectedParameter」, 時間:週三2016年11月30日7點18分55秒格林尼治標準時間0800(太平洋標準時間)} – zdevita

+0

我覺得你有什麼東西從在方案中提到的不同。你能否顯示你的變量和賦值或完整的代碼?無論如何,你有沒有將分數定義爲關鍵字(即排序鍵或散列鍵)?如果是,主鍵屬性必須定義爲字符串,數字或二進制類型。 – notionquest

相關問題