Это схема jobPosts , для которой в качестве одного из атрибутов используется значение posts_date. Цель состоит в том, чтобы запросить все посты работы между двумя датами. Вот схема для вашей справки:
{
'job_id': {S: jobInfo.job_id},
'company': {S: jobInfo.company},
'title': {S: jobInfo.title},
'posted_on': {S: jobInfo.posted_on},
}
posted_on
'основано на строке ISO (2019-11-10T10:52:38.013Z
). job_id является первичным ключом (ключом раздела), и, поскольку мне нужно запросить даты, я создал GSI (partition key
) в posts_on . Теперь вот запрос:
const params = {
TableName : "jobPosts",
IndexName: 'date_for_filter_purpose-index',
ProjectionExpression:"job_id, company, title, posted_on",
KeyConditionExpression: "posted_on BETWEEN :startDate AND :endDate",
ExpressionAttributeValues: {
":startDate": {S: "2019-10-10T10:52:38.013Z"},
":endDate": {S: "2019-11-10T10:52:38.013Z"}
}
};
У меня есть один документ в DynamoDB, и вот он:
{
job_id:,
company: "xyz",
title: "abc",
posted_on: "2019-11-01T10:52:38.013Z"
}
Теперь при выполнении этого я получаю следующую ошибку:
{
"message": "Query key condition not supported",
"code": "ValidationException",
"time": "2019-11-11T06:15:37.231Z",
"requestId": "J078NON3L8KSJE5E8I3IP9N0IBVV4KQNSO5AEMVJF66Q9ASUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 12.382362030893768
}
Я не знаю, что не так с вышеуказанным запросом.
Обновление после Томми Ответ: Я удалил GSI на posts_on и заново создал таблицу с job_id как partition key
и posts_on as sort key
. Я получаю следующую ошибку:
{
"message": "Query condition missed key schema element: job_id",
"code": "ValidationException",
"time": "2019-11-12T11:01:48.682Z",
"requestId": "M9E793UQNJHPN5ULQFJI2NR0BVVV4KQNSO5AEMVJF66Q9ASUAAJG",
"statusCode": 400,
"retryable": false,
"retryDelay": 42.52613025785952
}
Согласно этот ответ SO , GSI должен иметь возможность запрашивать даты, используя ключевое слово BETWEEN .