2016-08-18 108 views
1

我剛剛開始進入使用AWS的NodeJS SDK對於DynamoDb查詢數據(AWS DynamoDB SDK的NodeJS)

我「馬雲對我如何可以訪問特定的數據,而無需使用分區鍵有點糊塗。

我們只是假設我只有在我與屬性「ID」設置爲我的分區鍵

表名稱表1項:用戶

{ 
    "full_name": { 
    "S": "John Cena" 
    }, 
    "id": { 
    "S": "ABC123" 
    }, 
    "password": { 
    "S": "youcantseeme" 
    }, 
    "username": { 
    "S": "AndHisNameIs" 
    } 
} 

下面的代碼將返回我上面的對象,如果我查詢中使用我的鑰匙

順便說一下我使用dynamodb.query(參數,可以函數(ERR,數據){}

使用關鍵搜索

let params = { 
    TableName : "Users", 
    KeyConditionExpression: "#myid = :id", 
    ExpressionAttributeNames:{ 
     "#myid": "id" 
    }, 
    ExpressionAttributeValues: { 
     ":id": { 
      S: "ABC123" 
     } 
    } 
}; 

搜索無鑰匙

-I想它,如果我可以在不指定id字符串的情況下訪問這些數據。例如,如果用戶發送「用戶名」和「密碼」,我不會擁有該ID,因此我無法查找它。下面

-The代碼將返回一個錯誤,說明我缺少一個分區鍵「ID」

let params = { 
    TableName : "Users", 
    ExpressionAttributeNames:{ 
     "#myusername": "username" 
    }, 
    KeyConditionExpression: "#myusername = :username", 
    ExpressionAttributeValues: { 
     ":username": { 
      S: "AndHisNameIs" 
     } 
    } 
}; 

我的工作在嗎?

- 用username而不是id替換分區鍵?這是如何nosql數據庫的工作?我來自一個MySQL環境,所以我只是能夠搜索一個特定的字符串或數字或布爾值只要求在某一列lol

回答

2

添加一個Global Secondary Index到您想要查詢的字段。或者做一個全表掃描。

+0

如果你能爲我清理一些東西。我閱讀了文檔,並說它包含索引名稱。在我的情況下,「用戶名」?或者是我在創建表時需要設置的東西。 –

+0

索引名稱是您在創建全局二級索引時給予的名稱。如果您還沒有創建GSI,那麼您顯然還無法查詢它。一旦你創建了它,你將不得不給它一個名字,這就是你將要使用的名字。如果您忘記了GSI的名稱,則可以通過轉到表並在「索引」選項卡下查看GSI,在DynamoDB控制檯中查看它。 –

+0

謝謝你是我的問題的答案! –