here's my case: I'm trying to make a query on a table (table name HCI.LocCatApp
) using a value sent by API as KeyConditionExpression
, and I'm storing the results (which must be numbers not strings) in an array, and I want to use each value from this array as a FilterExpression
to scan another table (table name HCI.Category
) .. So what I need is to loop on the array values, take each of them as FilterExpression
and perform the scan
operation. I'm currently trying to use IN
but I'm not sure if it's even supported or not.
And keep in mind that the array is being filled during the runtime. And the callback
can be performed only once.
here's my code:
'use strict'
var AWS = require('aws-sdk');
var mydocumentClient = new AWS.DynamoDB.DocumentClient();
exports.handler = function (event, context, callback) {
var params = {
TableName: 'HCI.LocCatApp',
KeyConditionExpression : 'LocID = :lid',
ExpressionAttributeValues: {
":lid": event.LocID
},
ProjectionExpression: 'CatID'
};
var catIDs = [];
var catIDsObject = {};
var index = 0;
mydocumentClient.query(params, function (err, data){
if (err) {
callback(err, null);
}else{
data.Items.forEach(function(item){catIDs.push(item.CatID)});
//callback(null, catIDs);
}
})
catIDs.forEach(function(value){
index ++;
var catIDsKey = ":catID"+index;
catIDsObject[catIDsKey] = value;
})
var params2 = {
TableName: 'HCI.Category',
FilterExpression : "CatID IN (:cIDs)",
ExpressionAttributeValues : {
':cIDs' : catIDs
}
};
mydocumentClient.scan(params2, function (err, data){
if (err) {
callback(err, null);
}else{
callback(null, data);
}
})
}
For some reason, the current code runs successfully but it doesn't find any matches, even if I fill in the values manually in the array, there's still no results, the IN
operation doesn't seem to work.
And many thanks in advance