1

以下是DynamoDB JSON對象上的AWS lambda中的node.js查詢。 UserID是沒有排序鍵的主鍵。 GeoHash是一個輔助鍵,索引名稱爲「GeoHash-index」。 調用成功,沒有錯誤,但不會導致返回任何內容。下面的測試數據可能是錯誤的,因爲它沒有提供任何與索引名稱的連接,但我是AWS/noSQL的新手,並且有點迷路。AWS Lambda查詢二級索引

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

的地理散列字符串應該相互匹配。思考?

編輯 用這種方法沒有成功要麼

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(Error error,Object result);

使用回調參數是可選的。如果您不使用可選的回調參數,則行爲與您在沒有任何參數的情況下調用callback()相同。您可以在代碼中指定回調函數以將信息返回給調用者。 如果您未在代碼中使用回調,AWS Lambda將隱式調用它,並且返回值爲空。

這是,如果使用節點版本4.3

第一個第三個參數添加到處理函數,像這樣

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

然後從AWS lambda函數返回正確的方式當從功能返回時按照此表格

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

還有來自LAMBDA一個 「空」 的答覆... docClient.getItem({ 表名:表名, 鍵:{ 用戶名:{S: 「用戶2」}, }} , 這將給我一個價值然而 – Iorek