我有一个带有用户名字段的用户表。我需要在 dynamo db 中编写与此等效的内容: Select * from user where username in('a','b','c');
从代码中添加更多内容,我在数组中有用户名,比如 var arr=['a','b','c'];
到目前为止,我尝试过这个,结果为零
this.dynamo.client.scanAsync({
TableName: this.dynamo.table('users'),
FilterExpression: 'username IN (:list)',
ExpressionAttributeValues: {
':list': arr.toString()
}
}).then((response) => {
console.log(response);
return {
userFriends: result.Item.friends
};
});
当我在数组中传递一个元素时,它会给我搜索在用户表中传递单个元素的结果,但它不适用于数组中的多个元素。
最佳答案
各个用户应以逗号分隔的字符串变量形式给出。 JavaScript 数组相当于 AWS DynamoDB 数据类型中的 List。 DynamoDB 无法将数据库中的 String 数据类型与 List 属性(即 JavaScript 中的数组)进行比较。
var params = {
TableName : "Users",
FilterExpression : "username IN (:user1, :user2)",
ExpressionAttributeValues : {
":user1" : "john",
":user2" : "mike"
}
};
从 FilterExpression 的数组构造对象:-
请引用下面的代码,根据Array值动态形成对象。
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
};
注意:-
我不认为包含 1000 个用户名的 IN 子句在性能方面不是一个好主意。
关于node.js - 如何在dynamodb中使用in运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40222158/