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
相关产品推荐
相关产品推荐

