node.js - 如何在dynamodb中使用in运算符

标签 node.js amazon-dynamodb

我有一个带有用户名字段的用户表。我需要在 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/

相关文章:

node.js - Meteor下划线无法调用未定义的方法 'exports'

amazon-dynamodb - 更新 DynamoDB 中的多条记录

node.js - 如何增加 gulp 任务的堆栈跟踪?

javascript - jade 模板中的异步调用

node.js - 我可以直接在node.js上的Heroku中使用imagemagick吗

python - 更新 dynamoDB 中的项目

amazon-web-services - 通过 DynamoDB 流的 Lambda 触发器延迟

sql-server - AWS DMS(数据库迁移服务)完整 LOB 不适用于 SQL Server

date - 亚马逊 DynamoDB : How to search for range of dates?

node.js - Async.times 是否并行运行?