Amazon web services 在DynamoDB中查询返回默认值的密钥

Amazon web services 在DynamoDB中查询返回默认值的密钥,amazon-web-services,amazon-dynamodb,dynamodb-queries,Amazon Web Services,Amazon Dynamodb,Dynamodb Queries,DynamoDBbooks中有一个表,没有索引,只有一个分区键book\u id。还有一本“默认”书,其id为default。可以查询特定的书还是默认的书?有点退路。我想将它与API网关结合使用 { "TableName": "books", "KeyConditionExpression": "book_id = :v1 or book_id = :v2", "Expression

DynamoDB
books
中有一个表,没有索引,只有一个分区键
book\u id
。还有一本“默认”书,其id为
default
。可以查询特定的书还是默认的书?有点退路。我想将它与API网关结合使用

{
    "TableName": "books",
    "KeyConditionExpression": "book_id = :v1 or book_id = :v2",
    "ExpressionAttributeValues": {
        ":v1": {
            "S": "12345"
        },
        ":v2": {
            "S": "default"
        }
    }
}

我在KeyConditionExpression:或“中使用了无效的运算符。谢谢大家!

KeyConditionExpression
中不能这样做,它只支持直接分区键比较和排序键的可选第二个条件,其中这两个条件(如果提供了第二个条件)都必须为真。换句话说,您只能使用
运算符,第二个条件必须基于排序键,而不是分区键

您可以做的是运行查询以查找具有给定图书id的图书,如果没有这样的图书,查询将返回空结果。然后,您可以运行另一个查询来查找默认图书并返回它,或者,更可取的是,您可以预缓存该默认图书并返回它,而无需执行另一个查询。当然,这取决于您希望更改默认书本的频率(如果有)

所以在伪代码中,它可能看起来像

result = query(book_id)

if (result is empty) {
  result = cached_result || query(default_book_id)
}

return result

KeyConditionExpression
中不能这样做,它只支持直接分区键比较和排序键的可选第二个条件,其中这两个条件(如果提供了第二个条件)都必须为真。换句话说,您只能使用
运算符,第二个条件必须基于排序键,而不是分区键

您可以做的是运行查询以查找具有给定图书id的图书,如果没有这样的图书,查询将返回空结果。然后,您可以运行另一个查询来查找默认图书并返回它,或者,更可取的是,您可以预缓存该默认图书并返回它,而无需执行另一个查询。当然,这取决于您希望更改默认书本的频率(如果有)

所以在伪代码中,它可能看起来像

result = query(book_id)

if (result is empty) {
  result = cached_result || query(default_book_id)
}

return result