DynamoDB:如何为scan api设置FilterExpression,其中ExpressionAttributeValues中的值取决于多个字段上的某些处理结果?

时间:2018-03-19 07:20:14

标签: amazon-dynamodb

所以我想扫描表格并按照存储在2个字段中的值的总和来过滤结果。

目前我的js代码看起来像这样

var params = {
    TableName : "core-atv-quota-table-dev",
    FilterExpression: "#info.#branch = :branchId AND {{#info.#points / #info.#location}} > :score",
    ExpressionAttributeNames:{
         "#info": "matching_info",
         "#branch": "branch",
         "#points": "points",
         "#location": "location"
    },
    ExpressionAttributeValues: {
        ":branchId": "3",
        ":score": "8"
    },
    ReturnConsumedCapacity: 'TOTAL'
};
docClient.scan(params, function(err, data) {
    if (err) console.error(err); // an error occurred
    else console.log(data); // successful response
});

如您所见,{{#points/#location}}不起作用。在这种特殊情况下,我可以计算并将值存储在插入上并与之进行比较,但在我的用例中,我不知道来自matching_info的哪些字段将用于过滤结果。

我正在寻找一种方法来让dynamodb从项目中获取值,处理它们(加法,减法等)并使用处理过的信息来匹配给过滤的值​​。

1 个答案:

答案 0 :(得分:0)

不幸的是,这是不可能的。 FilterExpression不允许进行算术运算。

  

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

FilterExpression Docs

Comparison Operator and Function Reference