2016-06-22 7 views
1

私はDynamoDBからLambda AWSでデータを取得します。私はアンドロイドのアプリからラムダに送る私のパラメータにパラメータを追加しよう:Node.js-スキャンDynamoDB AWS-パラメータを追加

if (typeof event.high_lat != "undefined") { 
      params.ExpressionAttributeValues = event.high_lat; 
     } 

しかし、私はエラーを取得する:

[InvalidParameterType: Expected params.ExpressionAttributeValues to be a map] 
    message: 'Expected params.ExpressionAttributeValues to be a map', 

誰もがそれを解決する方法を知っていますか?

私の全体のコード:Androidアプリから送信されたコードの

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", 
    }, 

    ExclusiveStartKey: { 
     "ID": {"S": event.LastEvaluatedKey} 
    }, 

    ExpressionAttributeValues: { 
     ":lower_lon": {"N": event.low_lon}, 
     ":higher_lon": {"N": event.high_lon}, 
     ":lower_lat": {"N": event.low_lat} 
    } 
}; 


if (typeof event.high_lat != "undefined") { 
      params.ExpressionAttributeValues = 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); 


     } 
    }); 
}; 

例:

{ 
    "low_lon": "16", 
    "high_lon": "17", 
    "low_lat": "52", 
    "high_lat": "53" 
} 

答えて

1

あなたはあなたの全体のExpressionAttributeValuesは、単一の値を持つマップ離れて吹いています。上記のコードを見て、ExpressionAttributeValuesマップに値を追加する方法を確認するだけです。

変更この:これに

params.ExpressionAttributeValues = event.high_lat; 

params.ExpressionAttributeValues[":higher_lat"] = {"N": event.high_lat}; 
+0

今私は、このようなエラーを取得:{[にValidationException:ExpressionAttributeValuesは無効なキーが含まれています:構文エラー。キー: "high_lat"] メッセージ: 'ExpressionAttributeValuesに無効なキーが含まれています:構文エラー。キー: "high_lat" '、 –

+0

ああ、申し訳ありませんが、私は少し構文を逃した。私の更新された答えを見てください。 –

+0

良いですが、今私は取得:[ValidationException:無効なFilterExpression:式で使用される式の属性値が定義されていません。属性値::higher_lat] メッセージ: '無効なFilterExpression:式で使用されている式属性値が定義されていません。属性値:: higher_lat '、 –

関連する問題