使用 OR 和 BEGIN 的 DynamoDB 查询



首先,我知道我们不能在KeyConditionExpression中使用OR运算符。 我将 I18n 密钥存储在数据库中,并且具有以下数据结构:

{
"de": "Key in German",
"en": "Key in English",
"pk_id": "I18N-12345"
}

我还有一个 UI,其中我有一个文本字段,应该允许我按任何语言文本过滤键。在这种情况下,英语或德语,由键表示deen.

我想实现一个查询,其键条件表达式如下所示:

{
KeyConditionExpression: "begins_with(#de, :search_text) OR begins_with(#en, :search_text)"
}

如前所述,这将是理想的,但由于我们没有OR操作,我真的不知道如何修改查询或如何创建允许我进行此查询的 GSI。

谢谢

您没有解释示例中的分区键和排序键是什么。不幸的是,每个表只能有一个排序键 - 只有该排序键才能像您一样使用begins_with()函数进行有效过滤。而且您不能让"en"和"de"都是同一个表的排序键。

但是,您可以使用LSI做一些事情来解决此限制。你可以让"en"成为原始表的排序键(我假设pk_id是分区键?(,然后创建一个 LSI(它甚至不需要是 GSI - LSI 更有效(,其分区键相同 (pk_id( 但排序键是"de"。然后,您只需执行两次每个查询 - 一次在基表上使用begins_with(#en, :search_text),一次在 LSI 上使用 'begins_with(#de, :search_text(。您想要的"OR"仅表示获取两个查询的结果。

最新更新