要查询两个字段

时间:2017-10-16 16:52:11

标签: javascript amazon-dynamodb dynamoose

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

{
  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 返回的previouslyUsed=false结果。

如果条件previouslyUsed=falsepromoGroup=friend有效,我该如何处理单个结果?

1 个答案:

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

它实际上就像那样“简单”。这让我在两个不同的领域进行过滤。

相关问题