我正在使用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