【问题标题】:Query multiple data with array of primary ids in DynamoDB在 DynamoDB 中使用主 ID 数组查询多个数据
【发布时间】:2017-11-16 20:08:37
【问题描述】:

我正在开发一个使用 DynamoDB 作为数据库的应用程序。 我有一个用户表,例如:

{
   id: 1, (Primary Key)
   name: "Indranil"
}

现在我的要求是,如果 id 类似:[1,5,8],我有数组,并且我想使用单个查询加载所有用户。

现在我在查询中使用 id 作为 keyConditionExpression,我可以一个接一个地获取每个用户数据,但是它会导致多个查询。

    let readparams  = {
      TableName : "user",
      KeyConditionExpression: "# = :",
      ExpressionAttributeNames:{
        "#": "id"
      },
      ExpressionAttributeValues: {
        ":id":1
      }
    };

然后我看到表达式中有一个“IN”操作,但不能在 KeyConditionExpression 中使用,它可以在 FilterExpression 中使用,但在 filterExpression 中我不能使用主键。此外,我不能只在查询中传递过滤器表达式,我还必须传递一个键表达式,但在我的情况下,我没有任何其他条件要检查。

    let readparams  = {
      TableName : "user",
      FilterExpression: "id IN (:id1, :id2)",
      ExpressionAttributeValues: {
        ":id1":1,
        ":id2":1
      }
    };

所以最终我只剩下一个选择,在前端加载所有数据,然后在前端使用 id 过滤那些数据,但显然这根本不是一个好的解决方案。

有人可以在这里指出什么是最好的解决方案。

【问题讨论】:

    标签: amazon-dynamodb aws-sdk


    【解决方案1】:

    批量获取商品 API 可用于通过关键属性获取多个商品。如果您为表定义了排序键,则需要同时提供分区和排序键属性值。

    Batch get item

    一些示例代码:-

    var table = "phone";
    
    var params = {
        "RequestItems" : {
            "phone" : {
                "Keys" : [ {
                    "phone_num" : "+14085551212",
                    "Country" : "USA"
                },
                {
                    "phone_num" : "+14085551313",
                    "Country" : "USA"
                }
                 ]
            }
        }
    
    };
    
    docClient.batchGet(params, function(err, data) {
        if (err) {
            console.error("Unable to read item. Error JSON:", JSON.stringify(err,
                    null, 2));
        } else {
            console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
        }
    });
    

    【讨论】:

    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 2020-01-03
    • 2019-12-26
    相关资源
    最近更新 更多