You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何按自定义类型字段值查询Amplify DataStore

如何在Amplify DataStore中查询包含特定自定义类型数组元素的模型?

我正在开发Flutter应用,使用Amplify DataStore操作数据,能正常查询String等常规类型,但不知道怎么按自定义类型数组查询。

我的数据模型如下:

type Shop @model {
    id: ID!
    owner: String
    item: [Item]
}

type Item{
    name: String
    color: String
}

我需要获取所有包含名为"abc"的Item的Shop列表,不关心Item的颜色。之前尝试用contains谓词查询,但写法不正确:

Future <List<Shop>> getShops(String itemName) async{
    try{
        final shops = await Amplify.Datastore.query(
            Shop.classType,
            where: Shop.ITEM.name.contains(itemName)
        );
        return shops;
    } catch (e){
        throw e;
    }
}

正确解决方案

对于Amplify DataStore中的自定义类型数组,要查询数组中存在满足特定条件的元素,需要使用**any**谓词,它会检查数组里是否至少有一个元素符合指定的条件。

修改后的查询代码如下:

Future <List<Shop>> getShops(String itemName) async{
    try{
        final shops = await Amplify.Datastore.query(
            Shop.classType,
            where: Shop.ITEM.any((item) => item.name.eq(itemName))
        );
        return shops;
    } catch (e){
        throw e;
    }
}

说明

  • any谓词接收一个回调函数,参数是数组中的元素类型(这里是Item),你可以在回调里定义该元素需要满足的条件(比如name.eq(itemName))。
  • 如果需要数组中所有元素都满足条件,可以使用all谓词;如果要检查数组是否包含某个完整的对象实例,可以使用contains谓词(但这里我们只关心name字段,所以any更合适)。

内容的提问来源于stack exchange,提问作者tamptek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:07:14