2015-05-09 82 views
7

我正在使用Amazon DynamoDB數據庫,並且我有一個以各種字符串作爲關鍵字的項目列表。我想查詢其中包含子字符串的項目。例如,如果某些按鍵有:

「abcd_aaa」
「abcd_bbb」
「abcd_ccc」Amazon DynamoDB查詢其中包含子字符串的項目

我要查詢,其中一個鍵包含「ABCD」和這3個項目將被退回。這可能嗎?

感謝

+1

我假設通過「查詢」,你的意思是實際的DynamoDB ['Query'](http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html)操作? – mkobit

回答

6

您只能使用等號(EQ)查詢hashKey。這就是說,如果這些值(「abcd_aaa」,「abcd_bbb」,「abcd_ccc」)屬於您的hashKey那麼您必須完全提供它們。在另一方面,Query操作也允許在rangeKey部分匹配有一些額外的比較操作的選項:

EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN 

有關詳細信息,請參閱Querydocumentation

一種可能性是使用hashKey and rangeKey在您的代碼的第一部分將是hashKey和最後的rangeKey,例如:

hashKey : abcd 
rangeKey : aaa 

通過這樣做,當你通過hashKey(ABCD)查詢,您將收到的所有三個記錄排序的rangeKey

+0

掃描可以工作,儘管這種方案不具有成本效益。 –

0

掃描將工作

像這樣

var params = { 
     TableName: "TABLE", 
     ScanFilter: { 
      "id": { 
       ComparisonOperator: "CONTAINS", 
       AttributeValueList: ["abcd"] 
      } 
     } 
}; 

var template = null; 
ddb.scan(params, function (err, data) { 
     if (err) { 
      console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); 
     } else { 
      //console.log("Query succeeded."); 
      data.Items.forEach(function (item) { 
       console.log(item); 
      }); 
     } 
}); 
+0

掃描可能「工作」,但會消耗容量單位以獲取整個表格內容並在之後進行過濾。這在性能和成本方面效率非常低,我認爲這應該在答案中予以強調。 – JHH