我正在使用Amazon DynamoDB數據庫,並且我有一個以各種字符串作爲關鍵字的項目列表。我想查詢其中包含子字符串的項目。例如,如果某些按鍵有:
「abcd_aaa」
「abcd_bbb」
「abcd_ccc」Amazon DynamoDB查詢其中包含子字符串的項目
我要查詢,其中一個鍵包含「ABCD」和這3個項目將被退回。這可能嗎?
感謝
我正在使用Amazon DynamoDB數據庫,並且我有一個以各種字符串作爲關鍵字的項目列表。我想查詢其中包含子字符串的項目。例如,如果某些按鍵有:
「abcd_aaa」
「abcd_bbb」
「abcd_ccc」Amazon DynamoDB查詢其中包含子字符串的項目
我要查詢,其中一個鍵包含「ABCD」和這3個項目將被退回。這可能嗎?
感謝
您只能使用等號(EQ
)查詢hashKey
。這就是說,如果這些值(「abcd_aaa」,「abcd_bbb」,「abcd_ccc」)屬於您的hashKey
那麼您必須完全提供它們。在另一方面,Query
操作也允許在rangeKey
部分匹配有一些額外的比較操作的選項:
EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN
有關詳細信息,請參閱Query
documentation。
一種可能性是使用hashKey and rangeKey
在您的代碼的第一部分將是hashKey
和最後的rangeKey
,例如:
hashKey : abcd
rangeKey : aaa
通過這樣做,當你通過hashKey
(ABCD)查詢,您將收到的所有三個記錄排序的rangeKey
掃描可以工作,儘管這種方案不具有成本效益。 –
掃描將工作
像這樣
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);
});
}
});
掃描可能「工作」,但會消耗容量單位以獲取整個表格內容並在之後進行過濾。這在性能和成本方面效率非常低,我認爲這應該在答案中予以強調。 – JHH
我假設通過「查詢」,你的意思是實際的DynamoDB ['Query'](http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html)操作? – mkobit