在无服务器应用程序中按来自 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 查询并按日期排序。
我在 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 查询并按日期排序。