AWS AppSync:查询按 id 找到 getObject 但没有按 id 过滤的 listObjects

AWS AppSync: query finds getObject by id but no listObjects filtered by id

我正在为我的 React Native Expo 项目使用 AWS AppSync。

我正在 运行 设置一个功能,其中包含标签和帖子。在创建标签之前,我使用以下方法检查标签是否已存在:

await API.graphql(graphqlOperation(
listTags, {filter: {tagName: {eq: "thetagnameiamcheckingfor"}}}))

我看到的行为是,即使在控制台中,某些存在的标记也不是来自此查询的 returning。当根本没有应用过滤器时,标签甚至不会出现在列表中。但是,当我 运行 getTag 使用相同的 id 时,我 return 使用了正确的标签。这种行为似乎是随机的 - listTags 上的大多数标签 return,但少数 select 不是。使用 getTag, {id: tagID}

找到所有标签

我正在将所有字符串转换为小写并删除空格,所以我知道这不是问题所在。

标签明明存在,为什么在 运行 查询 listTags 时 return 没有?

DynamoDB 一次最多读取 1MB 的数据。 DynamoDB 在读取最多 1MB 的数据后应用过滤器。 DynamoDB 在应用任何限制后应用过滤器。

如果您尝试列出和过滤,而您要查找的项目不在读取的前 1MB 数据中,则不会返回任何数据。如果您尝试使用限制列出和过滤,而您要查找的项目不在第一个 $Limit 项目中,则不会返回任何数据。

如果您想按特定值查找项目,而该值不是 table 键,您应该创建一个索引并在该索引上查询。