Node.js DynamoDB查询在Lambda函数中不返回任何项
基本上,我在Lambda函数中有一个DynamoDB连接。将在下面发布代码。这个DynamoDB连接似乎运行正常-它能够成功调用listTable和Descriptable函数,这意味着它得到了正确的配置-但是查询它不会返回任何结果,即使是我知道是正确的并且已经在Dynamo控制台上测试过的查询 更新:能够使用单独索引上的字符串成功查询,但仍然无法基于二进制 以下是Lambda函数的一部分:Node.js DynamoDB查询在Lambda函数中不返回任何项,node.js,amazon-dynamodb,aws-lambda,Node.js,Amazon Dynamodb,Aws Lambda,基本上,我在Lambda函数中有一个DynamoDB连接。将在下面发布代码。这个DynamoDB连接似乎运行正常-它能够成功调用listTable和Descriptable函数,这意味着它得到了正确的配置-但是查询它不会返回任何结果,即使是我知道是正确的并且已经在Dynamo控制台上测试过的查询 更新:能够使用单独索引上的字符串成功查询,但仍然无法基于二进制 以下是Lambda函数的一部分: const AWS = require('aws-sdk'); const SNS = new AWS
const AWS = require('aws-sdk');
const SNS = new AWS.SNS({ apiVersion: '2010-03-31', region: 'sa-east-1' });
const DDB = new AWS.DynamoDB({ apiVersion: '2012-08-10', region: 'sa-east-1' })
const Lambda = new AWS.Lambda({ apiVersion: '2015-03-31' });
const async = require('async');
const CREATE_NOTIFICATIONS = 'create-notifications'
const QUERY_TOKENS = 'query-tokens'
function getUsers(functionName, message, callback) {
var msg = JSON.parse(message);
var users = [];
console.log(DDB);
async.forEachOf(msg.targetsb64, function(value, index, cb) {
console.log("getUsers b64: ", value)
console.log(typeof(value))
DDB.describeTable({
TableName: 'tsGroups'
}, function(err, data) {
console.log(err)
console.log(data.Table.KeySchema)
})
DDB.query({
TableName: 'tsGroups',
KeyConditionExpression: "identifier = :v_user",
ExpressionAttributeValues: {
":v_user": {"B": value}
}
}, function(err, data) {
if (err) {
cb(err)
} else {
console.log("data: ", data)
console.log("items: ", data.Items)
data.Items.forEach(function(item) {
users.push.apply(users, item.users.BS)
})
cb()
}
})
}, function(err) {
if (err) {
callback(err)
} else {
console.log("getUsers users: ", users);
const promises = users.map((user) => invokeQueryTokens(functionName, msg, user));
Promise.all(promises).then(() => {
const result = `Users messaged: ${users.length}`;
console.log(result);
callback(null, result);
});
}
})
}
我尝试使用KeyConditions而不是KeyConditionExpression,但没有效果。Value指的是一个base64标识符字符串,它是从前面的Lambda函数传递过来的-我已经尝试过对正确的值进行编码,但没有帮助。可描述的函数仅用于详细说明DynamoDB是否正确连接,以及是否在正确的区域
TL;DR:上述代码段中的data.Items值始终是空数组,即使在执行我知道应该返回某些内容的查询时也是如此。我的错误是什么
谢谢,干杯