查找DynamoDB属性未设置*或*大于x的项目
我试图从Lambda(Node.js)扫描一个DynamoDB表来检查一个令牌是否已经过期。 我想筛选数据,以排除设置了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", } } }
事实certificate,执行“OR”操作的最好方法是使用新的基于string的过滤命令。 AttributesToGet
被ProjectionExpression
取代, FilterExpression
被FilterExpression
取代。
请注意,对于新命令,您将无法使用保留字,并且必须通过使用ExpressionAttributeNames
定义这些键以及使用ExpressionAttributeNames
定义任何值来解决任何保留字。
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()} } }
- 当我试图在cloudsearch上传一个文档时,我无法处理这个错误
- 使用Node.js将数据从MSSQL传输到DynamoDB
- 发电机数据库错误无效ProjectionExpression:文档path中使用的expression式属性名称未定义; 属性名称:#P
- 任何人都可以提供一个dynamodb文件客户端upsert的例子吗?
- 在Dynamo dB的获取操作中,“在参数中缺less必需的键”键
- DynamoDB,使用AWS Lambda(NodeJS运行时)映射值的dynamicprimefaces更新
- 在Node中本地使用dynamodb时,“无法从任何提供程序加载凭据”
- 如何获取aws-dynamoDB中的所有字段?
- 如何从nodejs客户端重新格式化DynamoDB响应