如何在 Amplify Datastore 中创建动态查询

Posted

技术标签:

【中文标题】如何在 Amplify Datastore 中创建动态查询【英文标题】:How can I create a dynamic query in Amplify Datastore 【发布时间】:2021-09-21 11:53:03 【问题描述】:

如何在放大反应应用程序中创建动态查询

预期查询:

const posts = await DataStore.query(Post, c => c.or(
  c => c.rating("gt", 4).status("eq", PostStatus.PUBLISHED)
));

“评分”和“状态”可能会因用户而异。请帮我创建一个动态数据存储查询。

【问题讨论】:

您能发布另一个动态生成查询的示例吗? @johannchopin - 我需要根据我的架构更改过滤器查询。例如:对于用户 A,它是评级和状态。对于用户 B,它可能是活动和状态。 【参考方案1】:

假设您有一个对象,它定义了哪些用户可以使用哪些过滤器查询。这里我假设用户可以是 typeA 和 typeB 两种类型。

const queryTable = 
    typeA: ['status', 'rating'],
    typeB: ['active', 'status']


const posts = await DataStore.query(Post, c => c.or(
    c => 
        const operator = "eq" || "gt";
        const value = 4 || "published";
        queryTable[user.type].forEach(func, => 
            c.[func](operator, value)
        )
        return c
    
));

你必须想办法传递运算符和值。

【讨论】:

这一行const operator = "eq" || "gt"; 将始终评估为eq。与const value = 4 || "published" 相同,它将是4 是的,我知道,但这是一个例子,说明他可以使用 wither eq 或 gt 或任何他喜欢的操作员。价值也一样。 @Karthik:感谢您的询问,它的工作。另外,我们如何一起处理 AND 和 OR 查询。请指教

以上是关于如何在 Amplify Datastore 中创建动态查询的主要内容,如果未能解决你的问题,请参考以下文章

AWS Amplify DataStore 与存在于数组中的过滤器

AWS Amplify AppSync 使用在 Cognito 中创建的 Google 用户登录

通过 GraphQL 键检索 AWS Amplify DataStore 记录

我可以在使用 AWS amplify for Cognito 和 DataStore 的同时使用 fire base 来托管我的 Flutter Web 应用程序吗

Google App Engine Datastore 中的索引和索引条目限制

无法在 GeoServer 中创建 SQL Server 数据存储