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

问题描述 投票:0回答:2

我正在尝试使用此域中的以下查询从发电机数据库中获取详细信息,而服务只是键(非主键)

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

这给出了如下所示的错误

{
"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
 }
node.js amazon-web-services amazon-dynamodb
2个回答
6
投票

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

错误告诉您这一点,因为它可以看到您的

ExpressionAttributeValues
但没有
FilterExpression
来使用它们。

根据 AWS 文档 - 使用扫描

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

查看 DDB 文档此处,了解有关如何使用

scan
方法的完整详细信息。


0
投票

这对我有用:

const paramsVehicles = {
    TableName: "vehicles",
    FilterExpression: "#manufacturer = :manufacturer and #modelName = :modelName",
    ExpressionAttributeNames: {
        "#manufacturer": "manufacturer",
        "#modelName": "modelName",
    },
    ExpressionAttributeValues: {
        ":manufacturer": "SEAT",
        ":modelName": "Ateca",
    }
};

我使用了不同的表格和模型,但该方法是通用的,可以在所要求的示例中使用。

© www.soinside.com 2019 - 2024. All rights reserved.