如何在 dynamoDB 中查询 TTL?
How can I Query on TTL in dynamoDB?
我在我的 dynamoDB table 中设置了一个 TTL 属性。当我推送记录时获取当前日期(在节点中使用 js sdk)并为其添加一个值(如 5000)。据我了解,当达到该日期时,aws 将清除记录,但只能在 48 小时内清除。在此期间,记录可以作为查询结果返回。
我想过滤掉过期的项目,这样如果它们已过期但未被删除,它们将不会作为查询的一部分返回。
这是我用来尝试做到这一点的方法:
var epoch = Math.floor(Date.now() / 1000);
console.log("ttl epoch is ", epoch);
var queryTTLParams = {
TableName : table,
KeyConditionExpression: "id = :idval",
ExpressionAttributeNames:{
"#theTTL": "TTL"
},
FilterExpression: "#theTTL < :ttl",
ExpressionAttributeValues: {
":idval": {S: "1234"},
":ttl": {S: epoch.toString()}
}
};
我没有得到任何结果。我认为这个问题与 TTL 属性是一个字符串有关,而我试图在它上面做一个 <。但我没有决定 TTL 字段的数据类型 - aws 为我做了这件事。
我该如何补救?
根据 Enabling Time to Live AWS 文档,TTL 应设置为数字属性:
TTL is a mechanism to set a specific timestamp for expiring items from your table. The timestamp should be expressed as an attribute on the items in the table. The attribute should be a Number data type containing time in epoch format. Once the timestamp expires, the corresponding item is deleted from the table in the background.
您可能只需要创建一个新的 Number 属性并将 TTL 属性设置为该属性。
我在我的 dynamoDB table 中设置了一个 TTL 属性。当我推送记录时获取当前日期(在节点中使用 js sdk)并为其添加一个值(如 5000)。据我了解,当达到该日期时,aws 将清除记录,但只能在 48 小时内清除。在此期间,记录可以作为查询结果返回。 我想过滤掉过期的项目,这样如果它们已过期但未被删除,它们将不会作为查询的一部分返回。 这是我用来尝试做到这一点的方法:
var epoch = Math.floor(Date.now() / 1000);
console.log("ttl epoch is ", epoch);
var queryTTLParams = {
TableName : table,
KeyConditionExpression: "id = :idval",
ExpressionAttributeNames:{
"#theTTL": "TTL"
},
FilterExpression: "#theTTL < :ttl",
ExpressionAttributeValues: {
":idval": {S: "1234"},
":ttl": {S: epoch.toString()}
}
};
我没有得到任何结果。我认为这个问题与 TTL 属性是一个字符串有关,而我试图在它上面做一个 <。但我没有决定 TTL 字段的数据类型 - aws 为我做了这件事。 我该如何补救?
根据 Enabling Time to Live AWS 文档,TTL 应设置为数字属性:
TTL is a mechanism to set a specific timestamp for expiring items from your table. The timestamp should be expressed as an attribute on the items in the table. The attribute should be a Number data type containing time in epoch format. Once the timestamp expires, the corresponding item is deleted from the table in the background.
您可能只需要创建一个新的 Number 属性并将 TTL 属性设置为该属性。