1

以下は、DynamoDB JSONオブジェクトのAWSラムダのnode.jsクエリです。 UserIDはソートキーを持たないプライマリキーです。 GeoHashはインデックス名が "GeoHash-index"のセカンダリキーです。 呼び出しは成功し、エラーは発生しませんが、何も返されません。以下のテストデータはインデックス名に接続していないので間違っている可能性がありますが、AWS/noSQLを初めて使用していて少し失われています。ラムダテストデータがジオハッシュ・ストリングが一致しなければならないAWSラムダクエリ副インデックス

{ 
    "GeoHash": "dpz886gb0tb0", 
    "Radius": 2, 
    "Timestamp": 1472601493180, 
    "UserID": "User1" 
} 

ある

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

exports.handler = function(event,context,callback) { 

    console.log(JSON.stringify(event, null, ' ')); 

    var tableName = "table1"; 

    // getItem 
    docClient.getItem({ 
     TableName: tableName, 
     IndexName: "GeoHash-index", 
     KeyConditionExpression: "GeoHash = :geohash", 
     ExpressionAttributeValues: {":geohash": "dpz886gb0tb0"} 
    }), 

    function(err,data){ 
     if(err){ 
      callback(err); 
     } else { 
      callback(null,data); 
     } 
    } 
}; 

。思考?

EDIT この方法ではありません成功

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

exports.handler = function index(event, context, callback) { 
    var params = { 
     TableName: "LocationAware1", 
     IndexName: "GeoHash-index", 
     KeyConditionExpression: "GeoHash = :geohash", 
     ExpressionAttributeValues: { 
      ":geohash": {'S': 'dpz886gb0tb0'} 
     }, 
    }; 

    docClient.query(params, function(err, data) { 
     if (err) 
      console.log(JSON.stringify(err)); 
     else 
      console.log(JSON.stringify(data)); 
    }); 
} 

答えて

1
var AWS = require('aws-sdk'); 

exports.handler = function(event,context,callback) { 

    var params = { 
     TableName: 'Table1', 
     IndexName: 'GeoHash-index', 
     KeyConditionExpression: 'GeoHash = :geohash', 
     ExpressionAttributeValues: { 
     ':geohash': 'dpz886g8p9e2', 
     } 
    }; 

    var docClient = new AWS.DynamoDB.DocumentClient(); 

    docClient.query(params, function(err, data) { 
     if (err) callback(err); 
     else callback(null, data); 
    }); 
} 

書き換え済みです。

1

どちらかあなたは呼び出しがエラーなしで成功したと言うとき、私はあなたがノードのバージョンを使用している場合は、ラムダ

への呼び出しを意味すると仮定しています4.3 aws lambdaドキュメントのこの抜粋から分かるように、関数から戻る方法は非推奨です

Node.jsランタイムv4.3では、オプションのコールバックパラメータがサポートされています。あなたは>明示的に情報を呼び出し側に返すためにそれを使うことができます。一般的な構文は次のとおりです。

コールバック(エラーエラー、オブジェクト結果)。

コールバックパラメータの使用はオプションです。オプションのcallbackパラメータを使用しない場合、パラメータを指定せずにcallback()を呼び出した場合と同じ動作になります。呼び出し元に情報を返すためにコード内にコールバックを指定することができます。 コードでコールバックを使用しない場合、AWS Lambdaは暗黙的にコールし、戻り値はnullです。

これはまずそう

exports.handler = function(event,context,callback) 

のようなハンドラ関数に3番目のパラメータを追加したノードのバージョン4.3

を使用している場合、AWSラムダ関数から復帰するための正しい方法であります関数から復帰するときは、この形式に従います。

function(err,data){ 
     if(err){ 
      callback(err); 
     } else { 
      callback(null,data); 
     } 
    } 
+0

スティルラムダから "ヌル" 応答を持っている... docClient.getItem({ テーブル名:tableNameの、 キー:{ ユーザーID:{S: "ユーザー2"}、 }}、 この意志しかし、私に値を返す – Iorek