具有多个条件的 AWS DYNAMO DB 查询

Shi*_*bon 1 amazon-web-services node.js amazon-dynamodb

我正在尝试使用此 DOMAIN 中的波纹管查询从 dynamo db 中获取详细信息,而 SERVICE 只是键(非主键)

let params = {
    TableName: asset_table,
    ConsistentRead: true,
    ProjectionExpression: 'ID,SERVICE',
    KeyConditionExpression: "DOMAIN = :service_name AND SERVICE EQ :service_domain",
    ExpressionAttributeValues: {
         ":service_name": {"S":service },
         ":service_domain": {"S":domain}
    }
};
docClient.scan(params, (err, data) => {
    if (err) {
        onComplete(err);
    } else {
        console.log(data);
        onComplete(null, {
            data
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

这给出了如下给出的错误

{
"message": "ExpressionAttributeValues can only be specified when using expressions: FilterExpression is null",
"code": "ValidationException",
"time": "2019-01-09T09:47:09.180Z",
"requestId": "0G3C02E6251S2H1IQ2LQUTN04JVV4KQNSO5AEMVJF66Q9ASUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 8.070453867451622
 }
Run Code Online (Sandbox Code Playgroud)

Jos*_*osh 5

scan方法不接受KeyConditionExpression, in params。相反,您必须使用FilterExpression参数。

错误告诉您这一点,因为它可以看到您ExpressionAttributeValues但不能FilterExpression使用它们。

根据 AWS Docs -使用扫描

过滤器表达式的语法与条件表达式的语法相同。过滤器表达式可以使用与条件表达式相同的比较器、函数和逻辑运算符。有关更多信息,条件表达式

在此处查看 DDB 文档以获取有关如何使用该scan方法的完整详细信息。