如何使用Node JS和AWS Dynamo DB进行子数组分页

时间:2020-03-08 12:24:01

标签: node.js amazon-dynamodb dynamodb-queries

我想使用aws dynamo数据库和node js对“ car_types ”进行分页。我不想使用js,我们可以使用dynamo db做到吗?我想要总项目,总页面,页面大小,当前页面和数据作为响应。

{
  "uid": "222-3333",
  "car_types": [
    {
      "description": "fsdf",
      "title": "sdfsd"
    },
    {
      "description": "fdfdfdf",
      "title": "dfdfd"
    },
    {
      "description": "dasda",
      "title": "asdas"
    },
    {
      "description": "dasd",
      "title": "asdas"
    },
    {
      "description": "dasdasd",
      "title": "asdas"
    }
  ]
}

我用来获取结果的AWS Dynamo DB和Node js代码。

export function get_car_types_list(){

  var params = {
    TableName : "cms_cars",
    KeyConditionExpression: "#uid = :uid",
    ExpressionAttributeNames:{
        "#uid": "uid"
    },
    ExpressionAttributeValues: {
        ":uid": "222-3333"
    }
};

return docClient.query(params).promise()
.then(function(data) {
      console.log(data);
      return data;

}).catch( (err) => {
  console.log('got Error', err);
  });


}

我想要使用dynamo db查询的结果:

{
"totalItem":5,
"totalPage":1,
"pageSize":"1",
"currentPage":"1",
  "car_types": [
    {
      "description": "fsdf",
      "title": "sdfsd"
    },
    {
      "description": "fdfdfdf",
      "title": "dfdfd"
    },
    {
      "description": "dasda",
      "title": "asdas"
    },
    {
      "description": "dasd",
      "title": "asdas"
    },
    {
      "description": "dasdasd",
      "title": "asdas"
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

当执行scan/query时,DynamoDb将返回1 mb数据,如果还有剩余数据,还将添加LastEvaluatedKey来返回结果。如果您通过ExclusiveStartKey: LastEvaluatedKey,则可以scan/query进行分页。我对您的方法进行了一些调整,可能会对您有所帮助。

编辑:您可以通过将Limit: Number传递给参数来限制结果。这样一来,您可以限制退货项的数量,而使用LastEvaluatedKey可以得到更多。

export function get_car_types_list(LastEvaluatedKey){

  var params = {
    TableName : "cms_cars",
    KeyConditionExpression: "#uid = :uid",
    ExpressionAttributeNames:{
        "#uid": "uid"
    },
    ExpressionAttributeValues: {
        ":uid": "222-3333"
    },
    Limit: 5,
};
if (LastEvaluatedKey) {
    params.ExclusiveStartKey = LastEvaluatedKey;
}
return docClient.query(params).promise()
.then(function(data) {
      console.log(data);
      return data;

}).catch( (err) => {
  console.log('got Error', err);
  });
}