AWS Lambda查询辅助索引



以下是在dynamoDB JSON对象上的AWS lambda中的node.js查询。UserID是没有排序键的主键。GeoHash是一个辅助密钥,索引名称为"GeoHash index"。调用成功,没有任何错误,但不会返回任何结果。下面的测试数据可能是错误的,因为它没有提供与索引名称的任何连接,但我是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);
        }
    }
};

λ测试数据为

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

GeoHash字符串应该相互匹配。想法?

编辑这种方法也没有成功

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

重写一遍就干净了。

当你说调用成功且没有错误时,我假设你指的是对lambda 的调用

如果您使用的是节点版本4.3,从aws lambda文档的摘录中可以看出,从函数返回的方式是不推荐的

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

callback(Error Error,Object result(;

使用回调参数是可选的。如果不使用可选的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);
        }
    }

最新更新