2016-11-02 5 views
2

Ich versuche mit einer Knoten-Lambda-Funktion zwischen einem Datumsbereich zu scannen. Ich habe die Daten korrekt gescannt, aber ich kann nicht scheinen, dass der Datumsausdruck richtig funktioniert.Wie scannen Sie mit Lambda und DynamoDB zwischen den Datumsbereichen?

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); 
    }); 
}; 

Dies ist derzeit nicht versuchen, zwischen einem Bereich zurückzukehren, es ist nur ein einziges Datum im Moment suchen. Ich wollte dem Ausdruck keinen and hinzufügen, bis ich wusste, dass das funktionierte.

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

Die document_id ist mein Primärschlüssel:

Ein Beispieldokument in meinem DynamoDB ist wie so strukturiert. Ich bin ziemlich neu in dieser ganzen Lamdba/DynamoDB-Kombination, daher mag ich dies komplett falsch eingerichtet haben, aber das ist es, was ich durch meine Forschung geschafft habe.

Was ich letztendlich erreichen möchte, ist ein Startdatum und ein Enddatum, alle DynamoDB-Dokumente, die einen Datumsbereich innerhalb haben. Jede Hilfe würde sehr geschätzt werden.

+0

Mögliches Duplikat [? Wie DynamoDB nach Datum abgefragt wird (Bereich Key), ohne offensichtliche Raute-Taste] (http://stackoverflow.com/ Fragen/35963243/How-to-Abfrage-Dynamodb-by-date-Bereich-Schlüssel-mit-keine-offensichtliche-Hash-Schlüssel) – kixorz

Antwort

2

Zuerst ist der Scanvorgang korrekt. Die dynamodb.scan sollte in einer Schleife ausgeführt werden, bis LastEvaluatedKey nicht verfügbar ist. Bitte beachten Sie diese blog.

Das Lambda gibt das Ergebnis nicht zurück, da es nicht die Daten in dem ersten Scan gefunden haben würde. Wenn Sie den Scan erweitern können, bis LastEvaluatedKey nicht verfügbar ist, gibt das Lambda wahrscheinlich das Ergebnis zurück.

für die Suche und Scan-Operationen berechnet DynamoDB die Menge an bereitgestellten Durchsatz verbraucht basierend auf Objektgröße, nicht auf die Menge von Daten, die an eine Anwendung zurückgegeben wird.

Wenn Sie bestimmte Attribute abfragen oder scannen, die mit Werten von mehr als 1 MB Daten übereinstimmen, müssen Sie eine weitere Abfrage oder eine Scananforderung für die nächsten 1 MB an Daten durchführen. Nehmen Sie dazu den Wert LastEvaluatedKey aus der vorherigen Anforderung und verwenden Sie diesen Wert als ExclusiveStartKey in der nächsten Anforderung. Dieser Ansatz lässt Sie schrittweise abfragen oder nach neuen Daten in 1-MB-Schritten suchen.

ZWISCHEN Operator Beispiel: -

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

Dies war sehr hilfreich. Ich war unter der Denkweise, Standardoperatoren wie '<', '>', '=' usw. zu verwenden. Bei weiteren Untersuchungen war es sehr hilfreich zu finden, dass 'BETWEEN' eine Option war. –

Verwandte Themen