Как получить элементы в фильтре таблиц DynamoDB на основе TimeStamp и смещения этого значения TimeStamp? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть таблица 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));           
        });
    }
});

Возможно, у меня полностью логиканеверно, и есть лучший / умный способ выполнить такой запрос или лучший метод, сканирование или запрос в моем случае.Любая информация по этому вопросу будет принята с благодарностью.

...