Фильтр запросов DynamoDB по списку - PullRequest
0 голосов
/ 29 ноября 2018

Я довольно новичок в DynamoDB и у меня есть несколько вопросов, у меня есть таблица с некоторыми продуктами, где каждый продукт может иметь несколько цен.

Мне нужен способ получить все продукты с более одной ценойкак мне это сделать?

hash = url ( unique )
sort = vendor

Пример данных:

{
  "created_at": "2018-11-29T14:33:20.354895+0000",
  "vendor": "example.com",
  "url": "http://example.com/test",
  "name": "test product",
  "prices": [
    {
      "created_at": "2018-11-29T14:33:20.316396+0000",
      "price": 29
    },
    {
      "created_at": "2018-11-28T14:33:20.316396+0000",
      "price": 45
    }
  ]
}

1 Ответ

0 голосов
/ 30 ноября 2018

Учитывая вашу модель стола, я не знаю, как ответить на ваш вопрос.Но я могу предложить вам другую модель.:)

Проблема вашей модели в том, что вы хотите запросить length(prices).Насколько я знаю, DynamoDB не возвращает это значение само по себе.

Я предлагаю вам создать:

  • столбец nprices : number,
  • GSI (глобальный вторичный индекс) с выбранным хешем и ключом диапазона, начинающимся с nprices.Пример: hash = url, range = nprices_vendor.

Вы можете запросить базу данных с помощью чего-то вроде:

db.query({
  TableName: 'MY_TABLE_NAME',
  KeyConditionExpression: '#pk = :pk AND #sk > :skLow', # lexicographical comparison
  ExpressionAttributeNames: {
    '#pk': 'url', # partition key
    '#sk': 'nprices_vendor', # sorting key
  },
  ExpressionAttributeValues: {
    ':pk': 'http://example.com', 
    ':skLow': '2',
  },

}). Обещание ()

Но это еще не лучшее решение.Что вы должны сделать, это изменить свою таблицу и разместить каждую цену в отдельном ряду.Это еще одна проблема.:)

...