2016-11-02 3 views
2

노드 람다 (Node Lambda) 기능을 사용하여 기간을 검색하려고합니다. 데이터가 올바르게 스캔되었지만 날짜 표현식이 올바르게 작동하지 않는 것 같습니다.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

가능한 복제 [? 명백한 해시 키, 날짜 (범위 키)에 의해 DynamoDB의를 조회하는 방법 (http://stackoverflow.com/ 질문/35963243/how-to-query-dynamodb-date-range-key-with-no-obvious-hash-key) – kixorz

답변

2

먼저 스캔 작업이 정확합니다. dynamodb.scanLastEvaluatedKey을 사용할 수 없을 때까지 루프에서 실행해야합니다. 이 blog을 참조하십시오.

람다는 이 아니기 때문에 결과를 반환하지 않습니다.은 첫 번째 스캔에서 데이터를 찾았습니다. LastEvaluatedKey를 사용할 수 없을 때까지 검사를 확장 할 수 있으면 람다가 결과를 반환합니다.

조회 및 검색 조작의

는 DynamoDB의가 아닌 애플리케이션으로 리턴되는 데이터의 양에 , 상품의 크기에 기초하여 소모 프로비저닝 스루풋의 양을 계산한다.

의 데이터가 1MB를 초과하는 값과 일치하는 특정 특성을 쿼리하거나 검색하는 경우 다음 1MB의 데이터에 대해 다른 쿼리 또는 검색 요청을 수행해야합니다. 이렇게하려면 이전 요청에서 LastEvaluatedKey 값을 가져와 다음 값의 을 ExclusiveStartKey로 사용하십시오. 이 방법을 사용하면 에 점진적으로 1MB 단위로 새 데이터를 쿼리하거나 검색 할 수 있습니다. 운영자 샘플 간의

: -

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

이것은 매우 유용했습니다. 나는 '<', '>','=', 등등과 같은 표준 연산자를 사용한다는 사고 방식하에 있었다. 추가 연구에 따르면,'BETWEEN'이 옵션이라는 것을 알았을 때 매우 도움이되었다. –

관련 문제