当前位置: 首页 > 知识库问答 >
问题:

如何在AWS AppSync中查询特定范围内的数据,然后按另一个键对其结果进行排序?

靳彦
2023-03-14

我在AWS DynamoDB中创建了一个具有以下结构的寺庙名称博客作者

<代码>作者|组织ID |年龄|姓名

稍后,我需要进行如下查询:从organization id=orgId123获取年龄在30到50岁之间的所有作者,然后按字母顺序排列他们的姓名。

我不确定是否可以在DynamoDB中执行这种查询(稍后我将在AppSync中应用它),因此第一个解决方案是创建一个索引(GSI),其中包含partitionKey=orgIdsortKey=age(最终名称是orgId age index)。但接下来,当尝试在DynamoDB中查询时,设置partitionKey orgId=orgId123,sortKey age=[30;50],并且不设置过滤器;然后我可以有一个作者列表。但是,无法从上面的查询中按名称对列表进行排序。

我通过使用分区键=orgId和排序键=name创建新索引来重试另一个解决方案。然后,使用partitionKey orgId=orgId123在DynamoDB中查询(而不是扫描),设置空的sortKey值(因为我们只想按名称排序,而不是获取特定的名称),并在范围[30;50]中筛选年龄。这个解决方案似乎可行,但我注意到过滤器应用于结果列表-例如,结果列表有100个项目,但在按年龄应用过滤器后,可能会剩余70个项目,或者什么都没有。但我一直希望它能退回100件物品。

你能告诉我我的方法有什么问题吗?或者,是否可以在DynamoDB中进行这样的查询?

另一个(小)问题是何时将该表连接到AppSync API:如果不可能执行此类查询,那么在AppSync中也不可能执行此类查询?


共有1个答案

连晟
2023-03-14

您不可能在一个DynamoDB查询中完成所有您想做的事情。

选项1:

只要您对客户端上的对象排序没有问题,您就可以随心所欲。这将适用于人数相对较少的组织。

优点:

允许您在一系列用户之间高效地查询特定组织中的用户

缺点:

结果不会在服务器上按名称排序。

选项2:

优点:

允许您分页浏览按名称排序的组织中的用户。

缺点:

您无法有效地获取组织中年龄范围内的所有用户。您将有效地扫描索引,并且需要多次往返调用。

选项3:

第三种选择是使用DynamoDB streams和AWS Lambda将信息从DynamoDB流式传输到ElasticSearch。一旦数据进入Elasticsearch,您就可以进行更高级的查询。您可以在此处查看有关Elasticsearch搜索API的更多信息https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html.

优点:

更强大的查询引擎。

缺点:

使用DynamoDB流和AWS Lambda函数会带来更多开销。

 类似资料:
  • 我正在构建一个DynamoDB表,并且遇到了如何最好地构建索引的问题。我需要执行3个查询。 我的桌子: 以下是我需要实现的3个查询: 获取单个项目 现在我做一个getItem 作品伟大。 SQL: 如果我做这个本地索引,那么效果很好: SQL: 这是一个给我带来麻烦的问题。我想查询我的数据,并将其按日期排序返回。但是,我需要使用另一个字段作为范围进行查询。因此,如果我添加createdAt作为我的

  • 假设我有一个范围(section)和一个额外的要排除的范围列表,由元组(start,end)表示: 我正在寻找一种有效的算法,从这两个输入中返回一个新的范围列表,如: 这是引出第二个范围列表的主范围。 谢啦! 编辑: 实际上,deceze关于使用intervaltree的建议似乎很有趣。有几行: 显然,间隔被视为已关闭,但这是一个小问题。

  • 像列表对象一样输入数组,; 预期的降序排序输出为,“active”对象应该是第一个,而所有其他按降序排序的对象应该在“active”记录之后。尝试与下面的方法,但它没有给我作为第一次进入活跃。这种排序按数字递减,但活动不在先。 预期输出:活动对象首先出现在结果数组中,然后所有条目按数字降下。例如,[{number:2.3,active:true},{number:13.23,active:fals

  • 这是我的密码。我做错了什么?我想在RecyclerView中显示降序结果。

  • 我正在编写一个Spring Boot APIendpoint,我需要返回一个航空公司列表,该列表按3个或更多字符的字符串(描述)排序,列表的结果必须与顶部单词开头的字符串相匹配,其余的按字母顺序排序 我得到了与字符串匹配的列表,但我无法获得正确的顺序 如果我搜索关键词“ala”,所有以“ala”开头的航空公司都应该排在第一位。 这就是我得到的

  • TLDR;我想通过检查当前结果是否不存在于另一个结果中来筛选出结果 所以目前我有这2个查询 导致 而且 结果(当前只有一个数据) 就我的逻辑而言,这就是我想出的 但结果是空的,我所期待的是 我哪里做错了?