gpt4 book ai didi

swift - DynamoDB Swift4 复杂查询

转载 作者:行者123 更新时间:2023-11-28 14:29:05 26 4
gpt4 key购买 nike

我正在尝试快速进行复杂查询以从 DynamoDB 获取数据。我可以使用用户 ID 获取所有信息。然而,有时我可能不知道完整的用户 ID,需要进行更复杂的查询。

例如,如果我知道名字和姓氏,并且用户 ID 格式为“名字:姓氏:电子邮件”,我需要能够查询包含名字和姓氏的所有用户 ID,然后添加另一列的位置。

我是 dynamo 的新手,想完成类似下面的 sql 查询的操作。

SQL 示例:

SELECT * FROM mytable
WHERE column2 LIKE '%OtherInformation%'
AND (column1 LIKE '%lastname%' OR column1 LIKE '%firstname%')

这是我在 swift4 中获取用户 ID 的代码,如果我知道的话,不完全确定如何针对复杂查询修改它。

func queryDBForUser(Fname: String, Lname: String) {

let userId = Fname + "." + Lname + ":" + (UIDevice.current.identifierForVendor?.uuidString)!

self.UserId = userId

let objectMapper = AWSDynamoDBObjectMapper.default()

let queryExpression = AWSDynamoDBQueryExpression()

queryExpression.keyConditionExpression = "#userId = :userId"
queryExpression.expressionAttributeNames = ["#userId": "userId",]
queryExpression.expressionAttributeValues = [":userId": userId,]

objectMapper.query(CheckaraUsers.self, expression: queryExpression, completionHandler: {(response: AWSDynamoDBPaginatedOutput? ,error: Error?) -> Void in
if let error = error {
print("Amazon DynamoDB Error: \(error)")

return
}

我还尝试了以下代码的许多变体,但没有成功:

queryExpression.keyConditionExpression = "#FirstName = :firstName and #LastName = :lastName,"
queryExpression.expressionAttributeNames = ["#FirstName": "FirstName" , "#LastName": "LastName"]
queryExpression.expressionAttributeValues = [":FirstName": Fname,":LastName": Lname]

任何帮助将不胜感激,提前致谢!

最佳答案

您将无法使用 DynamoDB 查询执行此操作。当您查询 DynamoDB 中的表(或索引)时,您必须始终指定完整的主键。在您的情况下,这意味着“名字:姓氏:电子邮件”的完整值。

您可以使用 DynamoDB 扫描和过滤器表达式来执行此操作,但那样会查看表中的每个项目,因此速度可能会很慢且成本高昂。亚马逊将向您收取查看表中每一项所需的读取容量。

所以如果你真的想要,扫描操作的过滤器表达式应该是这样的:

"contains (#FirstName, :firstName) and contains (#LastName, : lastName)"

请注意,contains 会查找精确的子字符串匹配,因此如果您想要不区分大小写的匹配(如 SQL 中的 ILIKE),它将无法工作。

如果您需要执行这些类型的查询,那么您需要评估 DynamoDB 是否适合您。 DynamoDB 基本上是一个 NoSQL 键/值存储。它以有限的查询功能换取可扩展性和性能。如果您是从 SQL 背景来到 DynamoDB 并希望能够对表中的任何内容进行自由格式查询,您会感到失望。

关于swift - DynamoDB Swift4 复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51365957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com