问题标签 [dynamodb-queries]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4826 浏览

amazon-dynamodb - 如何查询 DynamoDb 中的对象列表(使用 CLI)

下面是我使用扫描表时 DynamoDb 中的表结构

现在我想查询表 where sw: []。我正在使用以下查询来检索结果。

key1.json

但我收到以下错误

请建议我如何查询表以检索结果。

0 投票
0 回答
1084 浏览

amazon-web-services - Amazon DynamoDB 重载全球二级索引 - 我做得对吗?

我来自 SQL 和 MongoDB 背景,并且非常想将 Amazon DynamoDB 用于新项目。到现在还可以忍受。我将数据写入 DynamoDB 并使用流神奇地将我的数据提取到 Elastic Search 进行搜索。它做我需要它做的一切。

但是,现在我正处于我希望能够更有效地直接从 DynamoDB 查询的数据的地步。

受影响的实体是:

  • 合同
  • 供应商
  • 报告期
  • 付款

我正在开发我的付款服务,通过该服务发起、更新、审核和查询付款。使用以下属性创建付款:

  • 合同编号
  • fromVendorId(可为空)
  • toVendorId
  • 报告期 ID
  • 数量
  • 地位

使用 DynamoDB,我希望能够进行以下查询:

  • 按日期范围获取报告期
  • 通过 reportPeriod 获取付款
  • 通过 fromVendor 获取付款
  • 通过 toVendor 获取付款
  • 按状态获取付款

上述的某种组合(例如“来自供应商 aaaa-bbbb 的拒绝付款”)。

按照官方 DynamoDB 文档,我正在尝试设置 Overloaded Global Secondary Indexes 来解决问题。

我现在还没有开始设置付款,因为这感觉很奇怪,但我确实开始设计报告周期的键和索引,以便我可以掌握它的窍门。这是我现在拥有的:

钥匙

索引

主键是id,排序。我的计划是对报告周期和付款使用同一个表,因为 DynamoDB 文档说您可以为整个应用程序使用一个定义明确的表(我让我的数据比这更孤立,每个微服务使用一个表)。

我承认在保持冗余行最新并通过许多字段进行查询方面会有开销,但假设我对维护没问题(我仍在质疑自己)......我的问题真的是......我做得对吗?

我假设我想查询的任何内容都需要添加带有 ID 和正确“排序”字段的新行。例如,我们有一个 ID 为 dddd-eeee 的付款,属于供应商 aaaa-bbbb,状态为 1。我假设要按供应商和状态查询此付款,我应该添加一个包含以下字段的附加项目:

  • id: 付款-aaaa-bbbb
  • 排序:fromVendorId,状态
  • 值:aaaa-bbbb,1

那是对的吗?如果我想通过 vendorId + status IN (1,3) 查询怎么办?

如果您有重载 GSI 的经验,请回顾一下我到目前为止所做的事情,如果我走在正确的轨道上,或者我是否处于正确的轨道上,或者我是否处于正轨,最好进行一些更改(快速)或我会被搞砸的。您建议进行哪些更改?

0 投票
2 回答
4797 浏览

amazon-web-services - 计算我的 Amazon DynamoDB 表中项目的大小

我想弄清楚我的 Amazon DynamoDB 表中项目的大小或完整大小,这样我就可以准确预测我正在从事的项目的成本。

我知道每读取 4kb 的数据将使用 1RCU。所以现在 id 想找出每个条目或总表的大小。

0 投票
1 回答
9291 浏览

amazon-dynamodb - DynamoDB 查询二级索引,如何定义索引

我一直在四处走动,只是不清楚该怎么做。

我有一个简单的表,我想在其中对几列进行查询。据我了解,这意味着为要查询的每一列创建一个二级索引。我已经定义了表——使用无服务器框架serverless.yml——并且收到了各种奇怪的错误消息。

目前的serverless.yml定义是:

它意味着类似于 Slack 服务 - 因此我想查询来自房间、用户等的条目。

根据我能找到的文档,这个定义是有意义的。一个应该为索引中使用的列声明属性,我已经这样做了。KeySchema - 我真的只需要 messageId 字段,但是一条错误消息表明它需要一个 RANGE 索引,所以我将 userId 字段添加到 KeySchema 只是为了关闭它。根据我找到的文档,二级索引字段看起来很正确。

有了这个定义,我在尝试使用部署时遇到了这个错误serverless deploy

我尝试了几种变体,也遇到了其他奇怪的错误。以下是一些,但我不记得对定义的相应更改。

0 投票
0 回答
126 浏览

node.js - 如何在 DynamoDB AWS 中为 order by 创建索引表

我想存储用户的信息和他们的总分。每个用户都有一个 facebook_id,它将是主键。我设计了这样的表和索引:

表名:UserDataTest
主分区键:facebook_id(字符串)

在此处输入图像描述

现在我想让前 50 名用户关注 total_ranking。我这样写了查询参数:

我无法获得我需要的数据。
你能给我一个解决方案吗?重写查询或重新设计表的任何想法?谢谢

0 投票
3 回答
4136 浏览

amazon-dynamodb - DynamoDB w/ Serverless,使用 Fn::GetRef 来引用全局二级索引

我有一个使用 DynamoDB 表定义的 API/服务。我有几个索引(定义为全局二级索引)来支持几个查询。我设计了带有 GSI 定义的表,并且看起来像正确的查询。但是,在进行查询时出现此异常:

在异常的顶部,它显示了我的 getRoomMessages 方法is not authorized to perform: dynamodb:Query on resource:的 ARN,并显示了全局二级索引的 ARN。

似乎很清楚,我需要定义策略来授予访问全局二级索引的权限。但目前还不清楚如何。我看到其他有关 DynamoDB 的 StackOverflow 问题抱怨文档碎片化以及找到任何东西有多困难。我不得不同意。“碎片化”这个词说得太轻了。

我正在使用无服务器框架。该provider部分显示了此策略/角色定义:

在该Resource部分中,我相信我应该列出声明了权限的资源。第一个引用整个表格。我刚刚添加的最后两个,并引用了索引。

编辑:当我运行时serverless deploy打印以下消息:

我对此尝试了几种变体,只是为了得到相同的错误。这归结为 -我如何serverless.yml使用 Cloudfront 语法获取索引的 ARN。ARN 确实存在,因为它显示在异常中。

DynamoDB 表定义:

正在使用的查询对应于上述异常:

以及生成查询的 Lambda 函数代码片段:

0 投票
2 回答
2618 浏览

amazon-dynamodb - DynamoDB查询二级索引ValidationException:条件参数类型与架构类型不匹配

我正在使用无服务器框架开发 AWS 服务。到目前为止,它有一个表和几个全局二级索引。我正在尝试查询全局二级索引。

询问:

它给出了一个例外——使用 Node.js DynamoDB 客户端,而不是 Node.js DocumentClient

我从文档中了解到 KeyConditionExpression 必须对分区索引进行相等匹配。在这种情况下,该room字段是roomIndex全局二级索引的分区索引。根据文档,您可以使用 ExpressionAttributeValues 数组将值替换为表达式,并且据我所知,这是正确构造的。

异常消息让我想到查询中提供的值与被查询列的类型之间的类型不匹配。这是正确的解释吗?但事实并非如此 - 正如您在下面看到的,该room列被定义S为 String。因此,这是一个字符串比较,应该没问题。

再次 - 我没有使用 DocumentClient。我已经看到很多答案建议通过使用该客户端来简化查询。我不使用它。

该表在无服务器中定义serverless.yml如下:

该表有一个简单的主键,然后是两个全局索引,每个索引都有简单的主键。

查询代码:

0 投票
0 回答
325 浏览

amazon-web-services - 使用 Node.js 在 DynamoDB 中查询多对多

我正在阅读如何在这篇文章中对 DynamoDB 中的多对多关系进行建模:https ://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-adjacency-graphs.html

在此处输入图像描述

假设要求显示给定发票的所有账单列表。但是您需要显示每个账单的所有属性(图像中的红色圆圈)。

我可以查询 Invoice-92551 的所有账单,如下所示:

好的,我现在有了账单,但我需要为每个账单提供更多属性。我可以执行以下操作:

是否可以一次查询两个结果?而不是首先调用 query() 和 batchGet()。

0 投票
1 回答
60 浏览

jquery - 如果条件dynamodb如何获取表的所有数据并应用

我正在研究这个文档 http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html

get_item 获取特定元素的功能,但我想获取该表的所有数据。有没有办法获取所有表格数据?而且没有办法提到根据If条件获取数据?

PS 我是 dynamodb 的新手,任何帮助将不胜感激。谢谢

0 投票
1 回答
1315 浏览

amazon-web-services - 使用不存在的开始键查询 dynamodb GSI 时出现奇怪的结果。错误或功能?

我正在使用不存在的开始键查询全局二级索引,并且看到了一些奇怪的结果。这是 ddb 错误还是(未?)记录的行为?有解决方法吗?

我有一个表,主 hashKey 为“id”,ShopIndex GSI 为“shop”。两者都没有范围键。

当我使用不存在的开始键“id”进行查询时,我希望返回一个带有正确最后评估键的空响应,因为在无效的开始键之后没有返回结果。

然而,我看到的是一个看似随机的结果被返回。

代码示例:

此代码段从索引中返回一项。不是第一个结果。不是最后一个。

如果我完全删除开始键,它会返回一个不同的项目。

如果我将其添加回来并设置 ScanIndexForward: false,它会返回第三个不同的项目。

如果我删除开始键并设置 ScanIndexForward: false,它会返回第四个不同的项目。

重量级

据我所知,除了查找“id”并在尝试将其用作开始键之前确认它存在之外,没有其他方法可以检测到这一点?

我是否在文档中错过了这一点,或者这是我需要解决的另一个不包括 aws 地雷的电池?