我在无服务器项目中有一个功能,可以从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中)?
答案 0 :(得分:0)
如果您的表具有排序键,则DynamoDB将返回有序结果的唯一方法。
如果您想查询ID,并按日期排序,则可以使用ID作为分区键,将日期作为数字'属性作为排序键。 DynamoDB密钥只能是String,Number or Binary attributes。您可以拥有一个数字属性,并以YYYYMMDDHHMMSS格式表示日期,这种格式自然会以正确的顺序排序。然后,您可以使用DynamoDB ScanIndexForward函数并将结果集限制为给定数量的项目。
或者,您可以按ID进行查询,并使用应用程序代码按日期排序。