要按日期范围(从今天到30天前)查询数据,你可以使用 AWS AppSync 的 GraphQL 查询语言和日期函数来实现。以下是一个示例解决方案:
Query
,并添加一个查询字段来获取按日期范围查询的数据。示例代码如下:type Query {
getDataByDateRange(startDate: String!, endDate: String!): [Data]
}
const AWS = require('aws-sdk');
const docClient = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
const { startDate, endDate } = event.arguments;
// 获取当前日期和30天前的日期
const today = new Date().toISOString().substring(0, 10);
const thirtyDaysAgo = new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000).toISOString().substring(0, 10);
// 确保传入的日期在合法范围内
const start = startDate < today ? startDate : today;
const end = endDate > thirtyDaysAgo ? endDate : thirtyDaysAgo;
// 构建 DynamoDB 查询参数
const params = {
TableName: 'YourTableName',
ProjectionExpression: 'attribute1, attribute2', // 替换为你的表的属性
FilterExpression: '#date BETWEEN :start AND :end',
ExpressionAttributeNames: {
'#date': 'date',
},
ExpressionAttributeValues: {
':start': start,
':end': end,
},
};
try {
const result = await docClient.scan(params).promise();
return result.Items;
} catch (error) {
console.error(error);
throw new Error('Failed to query data by date range');
}
};
请确保将 YourTableName
替换为你的 DynamoDB 表的名称,并根据你的表结构调整 ProjectionExpression
和 ExpressionAttributeNames
。
在 AWS AppSync 控制台中,创建一个新的数据源,类型选择 AWS Lambda
,并将 Lambda 函数与该数据源关联。
创建一个新的解析器,在解析器配置中将查询字段 getDataByDateRange
与数据源和 Lambda 函数关联。
在你的应用程序中使用 AWS AppSync 客户端,执行 getDataByDateRange
查询,并传递起始日期和结束日期作为参数。以下是使用 AWS Amplify 和 React 的示例代码:
import { API } from 'aws-amplify';
// 执行查询
const fetchDataByDateRange = async () => {
const startDate = new Date().toISOString().substring(0, 10);
const endDate = new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000).toISOString().substring(0, 10);
try {
const response = await API.graphql({
query: `
query getDataByDateRange($startDate: String!, $endDate: String!) {
getDataByDateRange(startDate: $startDate, endDate: $endDate) {
attribute1
attribute2
}
}
`,
variables: {
startDate,
endDate,
},
});
// 处理响应数据
console.log(response.data.getDataByDateRange);
} catch (error) {
console.error(error);
}
};
// 调用查询函数
fetchDataByDateRange();
这是一个基本的示例,你可以根据你的需求进行调整和扩展。