0

我有一个名为 Dynamoose (DynamoDB) 的模型PromoCode,其架构如下所示:

{
  promoCode: {
    hashKey: true,
    type: String,
  },
  previouslyUsed: {
    type: Boolean,
    default: false,
    index: {
      global: true,
      name: 'previouslyUsedIndex',
    },
  },
  promoGroup: {
    type: String,
    index: {
      global: true,
      name: 'promoGroupIndex',
    },
  },
}

本质上,我有一张充满促销代码的表格,我想获得一个尚未使用的促销代码,并且是促销代码特定“组”的一部分。

因此,我想同时查询previouslyUsedpromoGroup字段并将结果限制为单个结果。这就是我想出的:

PromoCode.query('previouslyUsed').eq(false)
    .and()
    .filter('promoGroup').eq('friend').limit(1)

即使我知道查询应该匹配结果,这也不返回任何结果。如果我将限制增加到10,那么我会得到四个结果。这让我认为限制是在 之前发生的,and()因此前面filter()只过滤了10 个返回的结果 where previouslyUsed=false

如何在条件previouslyUsed=false和条件promoGroup=friend有效的情况下获取单个结果?

4

1 回答 1

2

所以,这就是我想出的(回答我自己的问题)。首先,使用filter只会过滤从数据库中提取的结果。所以,我没有遇到一些奇怪的错误。

其次,我真正想要的是范围键设置。这将为我提供以下架构:

{
  promoCode: {
    hashKey: true,
    type: String,
  },
  previouslyUsed: {
    type: Boolean,
    default: false,
    index: {
      global: true,
      name: 'previouslyUsedIndex',
      rangeKey: 'promoGroup',
    },
  },
  promoGroup: {
    type: String,
    rangeKey: true,
    index: true,
  },
}

请注意上述两个实例的使用rangeKey。显然,两者都是执行以下查询所必需的:

PromoCode.query('previouslyUsed').eq(false)
    .where('promoGroup').eq('friend')

其实就是这么“简单”。这让我过滤两个不同的字段。

于 2017-10-16T20:04:55.933 回答