Dynamoose - Как запросить два GSI на одном и том же ключе? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть ключ в динамо, который имеет два глобальных вторичных индекса с разными ключами диапазона. Как это:

 const productSchema = new Schema(
  {
   productCategory: {
      type: String,
      index: [{
        global: true,
        rangeKey: 'serialNumberEnd',
        name: 'productCategory',
        throughput: { read: 1, write: 1 },
        project: ['quantity'],
      },
      {
        global: true,
        rangeKey: 'orderType',
        name: 'openOrders',
        throughput: { read: 1, write: 1 },
        project: true,
      }],
  },
  {
    throughput: { read: 1, write: 1 },
    useNativeBooleans: true,
    saveUnknown: true,
  },
);`

Попытка использовать «имя», похоже, не является ответом.

Resource.query('openOrder').eq(id)

Как я должен различать два GSI на одном и том же ключе в ресурсе при построении запроса?

РЕДАКТИРОВАТЬ - Добавлен дополнительный контекст в схему, перемещен ответ в раздел ответов

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018
const result = await Product.query(
{
  hash: { productCategory: { eq: 'tags' } },
  range: { orderType: { eq: 'sale' } },
},
{ indexName: 'openOrders' },).exec();

Я немного не спешил с этим синтаксисом. Надеюсь, это поможет кому-то еще.

РЕДАКТИРОВАТЬ: немного более чистый синтаксис / больше контекста для схемы

const result = await Product.query('productCategory', { indexName: 'openOrders' }).eq('tags')
.where('orderType').eq('purchase')
.exec();

Мне не повезло заставить Dynamoose распознавать правильный индекс на основе диапазона, найденного в операторе 'where'. Требуется {indexName: 'value'}.

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

В этом случае вы не хотите использовать свойство name индекса. Вы хотите использовать фактическое свойство для этого.

Например:

Resource.query('openOrder').eq(id)
.where('serialNumberEnd').lt(5)

Я не знаю всей вашей схемы, поэтому она не совсем соответствует тому, что вы хотите сделать. Но что-то подобное должно работать.

Вы также можете посмотреть этот тест в исходном коде для примера использования нескольких индексов для одного свойства и запроса.

...