[英]How To Get Item From DynamoDB Based On Multiple (one primary) Attributes Lambda/NodeJS
我在 DynamoDB 中的表結構如下所示:
uuid(主鍵)| ip | 用戶代理
從 lambda 內部的 NodeJS function 中,我想獲取 ip 和 useragent 與我提供的信息匹配的項目的 uuid。
隨着每周數以百萬計的項目被添加到表中,隨着時間的推移, Scan
變得越來越低效率和越來越昂貴。
這是我用來嘗試完成此操作的代碼:
function tieDown(sIP, uA){
const userQuery = {
Key : {
"ip" : "192.168.0.1",
"userAgent" : "sample"
},
TableName: "mytable"
};
return ddb.get(userQuery, function(err, data){
if (err) console.log(err.stack);
}).promise();
}
執行此代碼時,將引發以下錯誤ValidationException: The provided key element does not match the schema
。
所以我想我的問題是:
DocumentClient
,因此無需顯式聲明字符串、數字等。謝謝!
如果不指定分區鍵和排序鍵(如果有),則無法使用get
操作獲取單個項目。 在大多數情況下應避免掃描。 您可能需要的是一個全局二級索引,它允許您通過ip
和userAgent
進行query
。 請記住,不能保證 GSI 上的記錄是唯一的,因此您可能會得到多個結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.