0

Запрос таблицы dynamoDB с node.js. В таблице DynamoDB есть ключевое слово Timestamp, представленное целым числом. В этом случае я оставил: timestampStart как 1 и timestampEnd как 10 в качестве примера.Запрос DynamoDB с node.js между значениями

var params = { 
     TableName: "Table2", 
     KeyConditionExpression:"Timestamp = :ts BETWEEN :timestampStart AND :timestampEnd", 
     ExpressionAttributeValues: { 
      ":ts":"Timestamp", 
      ":timestampStart": 1, 
      ":timestampEnd": 10 
     } 
    }; 

The: ts неправильный, я вижу это. Я хочу вернуть любые строки, найденные с использованием значения Timestamp между timestampStart и timestampEnd.

сообщение

Ошибка:

"ErrorMessage": "Invalid KeyConditionExpression: Синтаксическая ошибка; маркер: \" МЕЖДУ \ "рядом с: \ ": Т.С. МЕЖДУ: timestampStart \"",

ответ

1

Если Timestamp является ключом раздела, а не ключом сортировки. Тогда у вас есть две проблемы:

  1. Не на Query операции, вы не можете выполнить тест сравнения (<,>, BETWEEN, ...) на ключе секционирования. Условие должно выполнить тест равенства (=) по одному значению ключа раздела и , необязательно, один из нескольких сравнительных тестов по одному значению ключа сортировки. Например:

    KeyConditionExpression: 'HashKey = :hkey and RangeKey > :rkey'

  2. У вас есть ошибка синтаксиса в вашем KeyConditionExpression, очевидно. Имейте в виду, что Timestamp является reserved word в DynamoDB. Таким образом, вы должны будете использовать ExpressionAttributeNames для этого:

(Если у вас есть ключ Id разделов и Timestamp ключ сортировки)

var params = { 
    TableName: "Table2", 
    KeyConditionExpression: "Id = :id AND #DocTimestamp BETWEEN :start AND :end", 
    ExpressionAttributeNames: { 
    '#DocTimestamp': 'Timestamp' 
    }, 
    ExpressionAttributeValues: { 
    ":id": "SOME VALUE" 
    ":start": 1, 
    ":end": 10 
    } 
}; 
+0

Если у меня есть Timestamp в качестве ключа секционирования, что создавая вторичный глобальный индекс с отметкой времени, так как ключ сортировки устраняет проблемы здесь? Затем я мог бы создать оператор равенства – Iorek

+0

Решенный с добавлением вторичного индекса – Iorek