DynamoDB中的复杂查询

时间:2017-05-03 10:42:24

标签: amazon-web-services amazon-dynamodb

我正在使用DynamoDB的应用程序。

有没有办法可以创建具有多个属性的GSI。我的目标是使用以下类型的查询查询表:

(attrA.val1 === someVal1 AND attrB.val2 === someVal2 AND attrC.val3 === someVal3) 
OR (attrA.val4 === someVal4 AND attrB.val5 === someVal5 AND attrC.val6 === someVal6)

我知道当我们拥有密钥属性时我们可以使用Query,当密钥属性未知时,我们可以使用Scan操作。如果我们需要使用非键属性查询,我也知道GSI。但在这种情况下我需要一些帮助。有没有办法模拟GSI以适应上述查询。

1 个答案:

答案 0 :(得分:1)

我的Movies表上有以下项目(即数据)。以下查询params对我来说很好。

您可以添加OP中存在的第三个属性。它应该工作正常。

DynamoDB确实支持FilterExpression上的复杂条件。

根据某些条件查询表: -

var table = "Movies";

var year_val = 1991;
var title = "Movie with map attribute";

var params = {
    TableName : table,
    KeyConditionExpression : 'yearkey = :hkey and title = :rkey',
    FilterExpression : '(records.K1 = :k1Val AND records.K2 = :k2Val) OR (records.K3 = :k3Val AND records.K4 = :k4Val)',    
    ExpressionAttributeValues : {
        ':hkey' : year_val,
        ':rkey' : title,
        ':k3Val' : 'V3',
        ':k4Val' : 'V4',        
        ':k1Val' : 'V1',
        ':k2Val' : 'V2'

    }
};

docClient.query(params, function(err, data) {
    if (err) {
        console.error("Unable to read item. Error JSON:", JSON.stringify(err,
                null, 2));      
    } else {
        console.log("GetItem succeeded:", JSON.stringify(data, null, 2));

    }
});

我的数据:

enter image description here

<强>结果: -

GetItem succeeded: {
  "Items": [
    {
      "title": "Movie with map attribute",
      "yearkey": 1991,
      "records": {
        "K3": "V3",
        "K4": "V4",
        "K1": "V1",
        "K2": "V2"
      }
    }
  ],
  "Count": 1,
  "ScannedCount": 1
}
相关问题