DynamoDB 查询错误

Error with DynamoDB Query

我正在尝试从 DynamoDB

查询字符串集项

错误:

{
    "errorMessage":"{
        "message": "Unexpected key 'Key' found in params",
        "code": "UnexpectedParameter",
        "time": "2016-01-06T08:24:02.183Z"
    }"
}

代码:

var table = 'users'
var params = {
    TableName : table,
    Key : {
        'userType': { 'S': event.type },
        'username': { 'S': event.username }
    }
}

ddb.query (params, function(err, data) {
    if (err) {
        // Oh well
    } else {
        context.succeed (data.Item)
    }
})

我希望我的系统允许多个用户使用相同的用户名 - 听起来很傻,但这是有充分理由的。

提前致谢

获取项目

  • 要求 : TableName, Key (至少hash)
  • 可选:AttributesToGet、ConsistentRead、ExpressionAttributeNames 等

如果您将 ddb.query 更改为 ddb.getItem - 该代码应该可以完美运行。

所以您的 getItem 产品看起来像:

var table = 'users'
var params = {
    TableName : table,
    Key : {
        'userType': { S: event.type },
        'username': { S: event.username }
    }
}

ddb.getItem (params, function(err, data) {
    if (err) {
        // Oh well
    } else {
        context.succeed (data.Item)
    }
})

虽然您可能需要查询,这样您就可以 return 多个项目

查询

  • 需要:表名,(KeyConditionExpression && ExpressionAttributeValues) ||关键条件
  • 可选:ReturnConsumedCapacity、QueryFilter、ProjectionExpression、Limit 等

这将是:

var table = 'usatUsers'
var params = {
    TableName : table,
    KeyConditions: {
        "userType": {
            "AttributeValueList": [{
                S: event.type
            }],
            "ComparisonOperator" : "EQ"
        }
    }
}

ddb.query (params, function(err, data) {
    if (err) {
        // Oh well
    } else {
        context.succeed (data)
    }
})

此外,请注意保留键 CHECK THIS LIST 以确保您的所有名称都符合要求