How to use “IN” statement in FilterExpression using array - dynamodb
Please refer this answer
Summary:-
For fixed number of values in "IN" clause:-
var params = { TableName : "Users", FilterExpression : "username IN (:user1, :user2)", ExpressionAttributeValues : { ":user1" : "john", ":user2" : "mike" }};
For more elements in array and forming the FilterExpression dynamically:-
var titleValues = ["The Big New Movie 2012", "The Big New Movie"];var titleObject = {};var index = 0;titleValues.forEach(function(value) { index++; var titleKey = ":titlevalue"+index; titleObject[titleKey.toString()] = value;});var params = { TableName : "Movies", FilterExpression : "title IN ("+Object.keys(titleObject).toString()+ ")", ExpressionAttributeValues : titleObject};
notionquest's answer is correct but i cant use my other values in ExpressionAttributeValues
like :country
and :status
so here is modified answer to make it working as per my requirements
var AttributeValuesObject = {}; AttributeValuesObject[':country '] = "USA"; AttributeValuesObject[':status'] = 1; var titleValues = ["1", "2"]; var titleObject = {}; var index = 0; titleValues.forEach(function(value) { index++; var titleKey = ":titleValue"+index; AttributeValuesObject[titleKey.toString()] = value; titleObject[titleKey.toString()] = value; }); var params = { TableName: "User", IndexName:"a-b-index", KeyConditionExpression: "Country = :country and #s = :status", FilterExpression: "Id IN ("+Object.keys(titleObject).toString()+ ")", ExpressionAttributeValues: AttributeValuesObject, ExpressionAttributeNames: {"#s": "Status"} }; //get users dynamodb.query(params, function (err, data) { if (err) //error else { //success } });
I've done it like this, parsing the params list once
const users = [{userId:1, name:'joe'}, {userId:2, name:'mike'}]const expressionAttributeValues = {};const userIdParams = users.map((u, i) => { const userParam = `:user${i}`; expressionAttributeValues[userParam] = u.userId; return userParam;}).join(',')var params = { TableName : 'Users', FilterExpression : `username IN (${userIdParams})`, ExpressionAttributeValues : expressionAttributeValues};