2016-06-20 7 views
0

Ich versuche, die ersten 10 Elemente zu erhalten, die Bedingung von DynamoDB mit Lambda AWS erfüllen. Ich habe versucht, Limit-Parameter zu verwenden, aber es ist (Basis auf dieser Website)AWS DynamoDB Node.js scan- bestimmte Anzahl von Ergebnissen

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#scan-property

„maximale Anzahl der Elemente zu bewerten (nicht unbedingt die Anzahl der passenden Artikel)“.

Wie bekomme ich 10 erste Artikel, die meine Bedingung erfüllen?

var AWS = require('aws-sdk'); 
var db = new AWS.DynamoDB(); 

exports.handler = function(event, context) { 

    var params = { 
    TableName: "Events", //"StreamsLambdaTable", 
    ProjectionExpression: "ID, description, endDate, imagePath, locationLat, locationLon, #nm, startDate, #tp, userLimit", //specifies the attributes you want in the scan result. 
    FilterExpression: "locationLon between :lower_lon and :higher_lon and locationLat between :lower_lat and :higher_lat", 
    ExpressionAttributeNames: { 
     "#nm": "name", 
     "#tp": "type", 
    }, 
    ExpressionAttributeValues: { 
     ":lower_lon": {"N": event.low_lon}, 
     ":higher_lon": {"N": event.high_lon}, //event.high_lon} 
     ":lower_lat": {"N": event.low_lat}, 
     ":higher_lat": {"N": event.high_lat} 
    } 
}; 

    db.scan(params, function(err, data) { 
    if (err) { 
     console.log(err); // an error occurred 
     } 
    else { 
     data.Items.forEach(function(record) { 
      console.log(
       record.name.S + ""); 
     }); 
     context.succeed(data.Items); 


     } 
    }); 
}; 
+1

Was haben Sie versucht? Wie sieht dein Code aus? Haben Sie Fehlermeldungen erhalten? – SunSparc

+0

Ich habe kein Problem mit meinem Code. Ich weiß einfach nicht, wie ich dieses Problem lösen soll. Nur für den Fall, dass ich es in meine Frage aufgenommen habe. –

+0

Limit sollte funktionieren – Shibashis

Antwort

0

Ich glaube, Sie wissen schon, den Grund für diese: die Unterscheidung, die DynamoDB zwischen ScannedCount und Count macht. Wie pro this,

ScannedCount - die Anzahl der Elemente, die abgefragt wurden oder gescannt, bevor ein Filterausdruck auf die Ergebnisse angewendet wurde.

Anzahl - Anzahl der Elemente, die in der Antwort zurückgegeben wurden.

Das Update für das dokumentiert ist direkt über diese:

entweder für eine Abfrage oder Scan Betrieb DynamoDB könnte ein LastEvaluatedKey Wert zurückgeben, wenn der Betrieb in der Tabelle nicht alle passenden Artikel zurück. Um die vollständige Anzahl der übereinstimmenden Elemente abzurufen, nehmen Sie den LastEvaluatedKey-Wert aus der vorherigen Anforderung und verwenden ihn als den ExclusiveStartKey-Wert in der nächsten Anforderung. Wiederholen Sie dies, bis DynamoDB keinen LastEvaluatedKey-Wert mehr zurückgibt.

die Antwort auf Ihre Frage ist also: die LastEvaluatedKey von DynamoDB Antwort und Scan wieder verwenden.