【问题标题】:Amazon DynamoDB Query for Items whose key contains a substringAmazon DynamoDB 查询其键包含子字符串的项目
【发布时间】:2015-07-20 00:16:23
【问题描述】:

我正在使用 Amazon DynamoDB 数据库,并且我有一个以各种字符串作为键的项目列表。我想查询其键包含子字符串的项目。例如,如果某些键是:

“abcd_aaa”
“abcd_bbb”
“abcd_ccc”

我想查询一个键包含“abcd”的位置,这三个项目将被返回。这可能吗?

【问题讨论】:

  • 我假设“查询”是指实际的 DynamoDB Query 操作?

标签: amazon-web-services amazon amazon-dynamodb


【解决方案1】:

您只能使用相等运算符 (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 排序的所有三个记录

【讨论】:

【解决方案2】:

扫描会起作用

类似的东西

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);
           });
      }
 });

【讨论】:

  • 扫描可能“有效”,但会消耗容量单位来获取整个表格内容并在之后对其进行过滤。这在性能和成本方面都非常低效,我认为应该在答案中强调。
猜你喜欢
  • 2015-04-19
  • 2011-03-30
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
相关资源
最近更新 更多