How to use “IN” statement in FilterExpression using array - dynamodb How to use “IN” statement in FilterExpression using array - dynamodb node.js node.js

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