首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS Lambda查询辅助索引

AWS Lambda查询辅助索引
EN

Stack Overflow用户
提问于 2016-08-31 00:34:57
回答 2查看 3.8K关注 0票数 3

下面是node.js对象上AWS中的dynamoDB查询。UserID是没有排序键的主键。GeoHash是一个辅助键,具有索引名"GeoHash- index“。调用成功,没有错误,但不会返回任何内容。下面的测试数据可能是错误的,因为它没有提供到索引名称的任何连接,但是我对AWS/noSQL并不熟悉,而且有点丢失。

代码语言:javascript
复制
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);
        }
    }
};

其中的lambda测试数据是

代码语言:javascript
复制
{
  "GeoHash": "dpz886gb0tb0",
  "Radius": 2,
  "Timestamp": 1472601493180,
  "UserID": "User1"
}

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

编辑使用此方法也没有成功

代码语言:javascript
复制
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));
    });
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-31 03:00:33

代码语言:javascript
复制
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);
    });
}

重写了它就干净了。

票数 2
EN

Stack Overflow用户

发布于 2016-08-31 01:16:13

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

如果您使用的是节点4.3版本,则不推荐从函数返回的方式,如aws文档中的摘录所示

Node.js运行时v4.3支持可选的回调参数。您>可以使用它显式地将信息返回给调用方。一般的语法是: 回调(错误,对象结果);使用回调参数是可选的。如果不使用可选的回调参数,则行为与调用没有任何参数的回调()相同。可以在代码中指定回调以将信息返回给调用方。如果代码中不使用回调,AWS将隐式调用它,返回值为null。 如果使用节点4.3,这是从aws lambda函数返回的正确方法。

首先向处理程序函数添加第三个参数,如下所示

代码语言:javascript
复制
    exports.handler = function(event,context,callback)

然后,当从函数返回时,请遵循以下形式

代码语言:javascript
复制
    function(err,data){
        if(err){
             callback(err);
        } else {
             callback(null,data);
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39239035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档