如何在 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 属性设置为该属性。