Dynamoose-如何在同一键上查询两个GSI?

时间:2018-10-29 22:46:56

标签: amazon-dynamodb dynamoose

我在dynamo中有一个键,该键具有两个具有不同范围键的全局二级索引。像这样:

 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 :(得分:0)

在这种情况下,您不想使用索引的name属性。您想使用实际属性来执行此操作。

例如:

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

我不知道您的整个架构,因此与您要执行的操作不完全匹配。但是类似的事情应该起作用。

您还可以查看this test in the source code的示例,该示例在一个属性上使用多个索引并进行查询。

答案 1 :(得分:0)

if(result.products.length > 0)

我在使用这种语法时有点慢。希望这对其他人有帮助。

编辑:语法更简洁/架构有更多上下文

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

我不希望Dynamoose根据'where'语句中的Range来识别正确的索引。 {{indexName:'value'}是必需的。