我有一个名为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',
},
},
}
基本上,我有一张充满促销代码的表格,我希望得到一个单独的促销代码,它没有被使用,并且是特定"组的一部分"促销代码。
因此,我想查询previouslyUsed
和promoGroup
字段,并将结果限制为单个结果。这就是我想出的:
PromoCode.query('previouslyUsed').eq(false)
.and()
.filter('promoGroup').eq('friend').limit(1)
即使我知道查询应该与结果匹配,也不会返回任何结果。如果我将限制增加到 10 ,那么我会得到四个结果。这使我认为限制发生在and()
之前,因此前面的filter()
仅过滤了 10 返回的previouslyUsed=false
结果。
如果条件previouslyUsed=false
和promoGroup=friend
有效,我该如何处理单个结果?
答案 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')
它实际上就像那样“简单”。这让我在两个不同的领域进行过滤。