在无服务器应用程序中按来自 DynamoDB 的字段项排序?

Get sorted by field items from DynamoDB in Serverless App?

我在 Serverless 项目中有一个函数可以从 Amazon DynamoDB 中获取所有项目 Table:

'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 中的 query/scan 按此字段获取已排序的项目(在 asc/desc 中)?

DynamoDB return 排序结果的唯一方法是 table 有排序键。

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

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