2016-11-02 106 views
2

ノードラムダ機能を使用して日付範囲をスキャンしようとしています。データが正しくスキャンされていますが、日付式が正しく動作するように見えません。LambdaとDynamoDBを使用して日付範囲をスキャンする方法は?

var AWS = require('aws-sdk'); 
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'}); 

exports.handler = function(event, context) { 
    var tableName = "MyDDBTable"; 
    dynamodb.scan({ 
     TableName : tableName, 
     FilterExpression: "start_date < :start_date", 
     ExpressionAttributeValues: { 
      ":start_date": { 
       "S": "2016-12-01" 
      } 
     } 
    }, function(err, data) { 
     context.succeed(data); 
    }); 
}; 

これは現在、範囲を返そうとしていません。今はただちに日付を探しています。私はこれが働いていることが分かるまで、andを式に追加したくなかった。私のDynamoDBの中

サンプル文書は、そのように構成されています

{ 
    "end_date": { 
     "S": "2016-12-02" 
    }, 
    "name": { 
     "S": "Name of document" 
    }, 
    "start_date": { 
     "S": "2016-10-10" 
    }, 
    "document_id": { 
     "N": "7" 
    } 
} 

document_idは私の主キーです。私はこのLamdba/DynamoDBの組み合わせ全体でかなり新しいので、これは完全に間違って設定されているかもしれませんが、これが私の研究を通じて完成したものです。

私が最終的に達成しようとしているのは、開始日と終了日が与えられ、その範囲内の日付範囲を持つすべてのDynamoDB文書を返します。どんな助けでも大歓迎です。

+0

可能な複製(http://stackoverflow.com/質問/ 35963243/how-to-query-dynamodb-date-range-key-with-no-obvious-hash-key) – kixorz

答えて

2

まず、スキャン操作が正しい。 dynamodb.scanは、LastEvaluatedKeyが利用できなくなるまでループで実行する必要があります。これはblogを参照してください。

ラムダはではないため、結果を返していません。では最初のスキャンでデータが見つかりませんでした。 LastEvaluatedKeyが利用できなくなるまでスキャンを拡張できれば、ラムダは結果を返す可能性があります。クエリと走査動作について

、DynamoDBの項目のサイズにはなく、アプリケーションに返されるデータの量に基づいて 消費プロビジョニングスループットの量を算出します。

が1 MBを超える値に一致する特定の属性を照会またはスキャンする場合、別のクエリ または次の1 MBのデータのスキャン要求を実行する必要があります。これを行うには、前の要求から LastEvaluatedKey値を取り、次の要求でその値 をExclusiveStartKeyとして使用します。この方法では、 に1 MB単位で新しいデータを徐々に問い合わせたりスキャンしたりできます。オペレータのサンプルBETWEEN

: - [?明らかなハッシュキーで、日付(レンジキー)でDynamoDBのを照会する方法]の

FilterExpression: "start_date BETWEEN :date1 and :date2" 
+0

これは非常に役に立ちました。私は '<', '>'、 '='などの標準的な演算子を使う考え方の下にあった。さらなる研究の結果、 'BETWEEN'がオプションであることを知ることは非常に有用であった。 –

関連する問題