gpt4 book ai didi

amazon-web-services - DynamoDb 查询仅通过主键

转载 作者:行者123 更新时间:2023-12-04 08:10:32 26 4
gpt4 key购买 nike

我是 DynamoDB 的新手(一般没有 Sql),我在理解如何形成一个简单的查询时遇到了一些麻烦..

我想要执行的是 SQL 中的一个简单的 SELECT FROM 但似乎我无法完成。

我的表定义基本上是:

表名 snsNotifications
主分区键recipientId (Number) <--- 这是一个用户id
主排序键 snsID (String) <--- 这是 SNS 消息 ID

它遵循一些属性(如 readAt)。

我要执行的查询是:

SELECT from snsNotifications WHERE recipientId=X and readAt=x

我什至可以在 AWS UI 上执行此查询:
Screenshot

我的 lambda 函数使用以下内容:
var params = {
TableName : "snsNotifications",
KeyConditionExpression : "recipientId = :recipientId and readAt = :readAt",
ExpressionAttributeValues: {
":recipientId": parseInt(msg.recipientId),
":readAt" : 0,
}
};

docClient.query(params, function(err, data) {
if (err) {
console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
} else {
console.log("Query succeeded.");
data.Items.forEach(function(item) { ... }

但我收到以下错误:

Unable to query. Error: { "message": "Query condition missed key schema element: snsID", "code": "ValidationException", "time": "2017-11-20T18:19:40.419Z", "requestId": "J73RIAE09GDRD1Q47I9OLCU7N7VV4KQNSO5AEMVJF66Q9ASUAAJG", "statusCode": 400, "retryable": false, "retryDelay": 44.175697630271316 }



所以基本上它提示snsID(主排序键)没有在查询本身上定义。

有灯吗?我敢打赌只是一些小细节。

提前致谢

最佳答案

将 KeyConditionExpression 中的 readAt 替换为 snsId。如果您不想包含排序键并希望通过非键属性 readAt 过滤数据,请使用 FilterExpression。

KeyConditionExpression 只能有分区键或排序键。对于非关键属性,您应该使用 FilterExpression。

关于amazon-web-services - DynamoDb 查询仅通过主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47398852/

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