从AWS Lambda函数的DynamoDB项的[列表]查询

时间:2018-11-18 05:31:49

标签: node.js aws-lambda amazon-dynamodb

如何从列表中查询? 我只想返回所有这些人的名字。

var MylistOfIds = ["userid1","userid2","userid3", ... ]

我的代码不起作用。

var params = {
    TableName: "myTableName",
    ProjectionExpression: "Name, Post",
    KeyConditionExpression: "begins_with(#sk, :skv)",
    FilterExpression: "#tp in (:mylist)",

    ExpressionAttributeNames: {
        "#tp": "userId",
        "#sk": "Sortkey",

    },
    ExpressionAttributeValues: {

        ":mylist": { L :  MylistOfIds }, 
        ":skv": { "S": "Post" },

    }
};

这是查询部分

let data1 = await dynamodb.query(params).promise();

          const items = data1.Items.map(
            (dataField) => {

                return {

                  name : dataField.Name.S
                  post : dataField.Post.S

                };
            }
        );
                  callback(null, { "user_name": items });

我也尝试了这个答案here,但没有任何运气:(

这是我当前的表结构:

|-----Primary-----|------SortKey-----|-----Name------|----Post-----|
    userid1             Post:345            Bob        Lorem Ipsum
    userid1             Post:457            Bob        Lorem ...
    userid2             Post:678            Rose       asdf .....
    userid3             Post:987            Jack       texte...
    userid3             Post:345            Jack       Loremimplsu.

1 个答案:

答案 0 :(得分:1)

关键条件表达式中没有分区键。 KeyConditionExpression必须始终具有分区键。

  

您必须指定分区键名称和值作为相等条件。 (source

此外,如果userId是您的分区键,则您不能在过滤器表达式中使用它。

  

过滤器表达式不能包含分区键或排序键属性。您需要在关键条件表达式中指定这些属性,而不是在过滤器表达式中指定。   (source

为了进行begins_with查询,假设UserId是您的分区键,您将需要为UserId的每个值分别请求。

如果需要更多帮助,则应更新问题以包括当前的表结构。