2016-09-23 89 views
0

我使用拉姆達(的NodeJS 4.3)來查詢我有以下DynamoDB:查詢迪納摩 - 錯過了關鍵

var params = { 
    TableName : "shoes", 
    KeyConditionExpression: "gender = :gender AND support = :support AND terrain = :terrain", 
    ExpressionAttributeValues: { 
     ":input": inputGender, 
     ":input": inputSupport, 
     ":input": inputTerrain 
    } 
} 

在運行此我得到的是我丟失的錯誤「查詢條件錯過了關鍵架構元素:Id「。這可能只是我的一個基本誤解,但如果我想查詢DynamoDB中的兩個或更多字段,是否需要將它們設置爲鍵或在所有字段上創建索引?

在此先感謝。

回答

0

A 查詢必須包含表的分區鍵(或全局二級索引)。您的表的分區鍵是id,您沒有在查詢中包含該鍵。鑑於您正在嘗試運行的查詢,我認爲在您的表上創建GSI並不合理。您將需要執行full table scan操作而不是查詢操作。

+0

這可能是我對Dynamo(第一次定時器)的根本誤解,但我基本上有一個用戶選擇3個字段,然後想要查詢Dynamo的結果。分區鍵現在是一個ID,用戶永遠不會知道這一點來查詢它。這在傳統SQL中顯然非常簡單,因爲「SELECT * FROM Tbl WHERE row1 = X OR row2 = Y OR row3 = Z」類型的東西。將這種思想轉化爲迪納摩的任何指導? – jeremykrall

+0

當我運行它現在我得到「條件只能是1或2的長度」,「 – jeremykrall

+0

不知道還有什麼要告訴你。你讀過我的答案嗎?你肯定有一個基本的誤解,如何執行這種類型在DynamoDB中進行查找您需要執行**掃描**而不是查詢您正在嘗試將DynamoDB視爲SQL數據庫,事實並非如此,我建議花時間閱讀文檔並瞭解其差異。如果你只是在尋找某人爲你修復代碼,至少在你的問題中顯示更多的代碼。 –