AWS Lambda查询二级索引

以下是DynamoDB JSON对象上的AWS lambda中的node.js查询。 用户ID是没有sorting键的主键。 GeoHash是一个辅助键,索引名称为“GeoHash-index”。 调用成功没有错误,但不会导致返回任何内容。 有可能下面的testing数据是错误的,因为它没有提供与索引名称的任何连接,但是我是AWS / noSQL的新手,有点失落。

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

lambdatesting数据在哪里

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

GeoHashstring应该相互匹配。 思考?

编辑这种方法也没有成功

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

当你说这个调用成功没有错误,我假设你的意思是调用lambda

如果您正在使用节点版本4.3,则从函数返回的方式已被弃用,如从aws lambda文档

Node.js运行时v4.3支持可选的callback参数。 您可以使用它显式地将信息返回给调用者。 一般的语法是:

callback(错误错误,对象结果);

使用callback参数是可选的。 如果您不使用可选的callback参数,则行为与您在不带任何参数的情况下调用callback()相同。 您可以在代码中指定callback函数以将信息返回给调用者。 如果您在代码中未使用callback,则AWS Lambda将隐式调用它,并且返回值为null。

如果使用节点版本4.3,这是从aws lambda函数返回的正确方法

首先像这样向处理函数添加第三个参数

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

那么当从函数返回时遵循这个表单

  function(err,data){ if(err){ callback(err); } else { callback(null,data); } } 
 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); }); } 

重写,它很干净。