gpt4 book ai didi

node.js - 查找未设置 DynamoDB 属性*或*大于 x 的项目

转载 作者:搜寻专家 更新时间:2023-11-01 00:40:57 24 4
gpt4 key购买 nike

我正在尝试从 Lambda (Node.js) 扫描 DynamoDB 表以检查 token 是否已过期。我想过滤数据以排除设置了 expiration_time 且小于当前时间的项目。对于未设置 expiration_time 的单元,我目前得到误报。

如何检查是否有过期时间戳根本没有 expiration_time 属性集?

dynamodb.scan({
"TableName": "fm_tokens",
"AttributesToGet": ["user_id"],
"ScanFilter": {
"token": {
"AttributeValueList": [{"S": tkn.toString()}],
"ComparisonOperator": "EQ"
},
"token_time": {
"AttributeValueList": [{"N": expiration.toString()}],
"ComparisonOperator": "GE"
},
"expiration_time": {
"AttributeValueList": [{"N": unix_timestamp.toString()}],
"ComparisonOperator": "GE",
}
}
}

最佳答案

事实证明,执行“或”运算的最佳方式是使用新的、基于字符串的过滤命令。 AttributesToGet 替换为 ProjectionExpressionScanFilter 替换为 FilterExpression

请注意,使用新命令您将无法使用 reserved words并且必须通过使用 ExpressionAttributeNames 定义这些键和使用 ExpressionAttributeValues 定义任何值来解决任何保留字。

dynamodb.scan({
// Define table to scan
"TableName": "fm_tokens",
// Only return selected values (optional)
"ProjectionExpression": "user_id",
// Write your expression, similar to SQL syntax
"FilterExpression":
"#token = :tkn AND "+
"token_time >= :expiration AND "+
"(attribute_not_exists(expiration_time) OR expiration_time >= :timestamp)",
// Use this to avoid reserved words by defining variables with the name instead
"ExpressionAttributeNames": {
"#token": "token"
},
// Same as with names, but for values - must include value type (S, N, etc.)
"ExpressionAttributeValues": {
":tkn": {"S": tkn},
":expiration": {"N": expiration.toString()},
":timestamp": {"N": unix_timestamp.toString()}
}
}

关于node.js - 查找未设置 DynamoDB 属性*或*大于 x 的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34688194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com