У меня есть таблица DynamoDB со следующей схемой:
var params = {
TableName : "SomeTable",
KeySchema: [
{ AttributeName: "userid", KeyType: "HASH"}, //Partition key
{ AttributeName: "transactionId", KeyType: "RANGE" } //Sort key
],
AttributeDefinitions: [
{ AttributeName: "userid", AttributeType: "S" },
{ AttributeName: "transactionId", AttributeType: "S" },
],
GlobalSecondaryIndexes: [
{
IndexName: "TransactionIndex",
KeySchema: [
{
AttributeName: "transactionId",
KeyType: "HASH"
},
{
AttributeName: "productId",
KeyType: "RANGE"
}
],
Projection: {
ProjectionType: "ALL"
},
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10
}
};
Я ищу запрос к этой таблице, отфильтрованной по значению времени, однако я не могу найти какую-либо документацию о том, как изменить это значение в FilterExpression,Идея состоит в том, чтобы найти все строки, в которых значение expiry_date_ms скоро истечет или только что истекло (т. Е. 1 день или 1 день после), следующим образом:
var startoffset = 86400000; // one day before
var endoffset = 86400000; // one day after
var params = {
TableName: "SomeTable",
FilterExpression: "#tm between :start and :end'",
ExpressionAttributeNames: { "#tm": "expiry_date_ms" },
ExpressionAttributeValues:{ ":start": "expiry_date_ms" - startoffset, ":end": "expiry_date_ms" + endoffset }
};
docClient.scan(params, function(err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log(params);
console.log("Scan succeeded.");
data.Items.forEach(function(item) {
console.log("Item :" + JSON.stringify(item));
});
}
});
Возможно, у меня полностью логиканеверно, и есть лучший / умный способ выполнить такой запрос или лучший метод, сканирование или запрос в моем случае.Любая информация по этому вопросу будет принята с благодарностью.