在Serverless App中按DynamoDB的字段项排序?

时间:2017-11-23 10:45:43

标签: javascript node.js amazon-web-services amazon-dynamodb serverless-framework

我在无服务器项目中有一个功能,可以从Amazon DynamoDB表中获取所有项目:

'use strict';

 var AWS = require('aws-sdk');
 var doc = new AWS.DynamoDB.DocumentClient();
 var api = {};

 api.getItems = (event, context, callback) {
    var id = event.pathParameters.id;

    var params = {
        TableName: 'Items',
        ExpressionAttributeValues: { ':itemId': id }
    };

    doc.scan(params, function(err, res) {
            if (err) return cb(null, {
                statusCode: err.statusCode,
                headers: { "Access-Control-Allow-Origin": "*" },
                body: JSON.stringify({ err: err.message })
            });

            if (res.Items === undefined) {
                return cb(null, {
                    statusCode: 404,
                    headers: { "Access-Control-Allow-Origin": "*" },
                    body: JSON.stringify({ err: "Assigned order are not found" })
                });
            }

            if (res.Items.length > 0) {
                return cb(null, {
                    statusCode: 200,
                    headers: { "Access-Control-Allow-Origin": "*" },
                    body: JSON.stringify(res.Items)
                });
            } else {
                return cb(null, {
                    statusCode: 200,
                    headers: { "Access-Control-Allow-Origin": "*" },
                    body: JSON.stringify([])
                });

            }
        }

    };

    module.exports = api;

每个回复项都包含date字段。 如何使用DynamoDB中的查询/扫描,通过此字段获取已排序的项目(在asc / desc中)?

1 个答案:

答案 0 :(得分:0)

如果您的表具有排序键,则DynamoDB将返回有序结果的唯一方法。

如果您想查询ID,并按日期排序,则可以使用ID作为分区键,将日期作为数字'属性作为排序键。 DynamoDB密钥只能是String,Number or Binary attributes。您可以拥有一个数字属性,并以YYYYMMDDHHMMSS格式表示日期,这种格式自然会以正确的顺序排序。然后,您可以使用DynamoDB ScanIndexForward函数并将结果集限制为给定数量的项目。

或者,您可以按ID进行查询,并使用应用程序代码按日期排序。