Flutter中如何在Isar数据库使用.max()聚合函数?
Isar数据库获取指定列最大值的正确写法
针对你的问题,Isar的.max()聚合函数需要直接作用在目标字段上,而非放在where()、filter()或findAll()之后。结合你的代码,有两种可行的写法:
方法一:利用索引字段生成的聚合方法
因为你给clientId字段添加了@Index注解,Isar会自动为该字段生成对应的聚合方法,直接调用即可:
Future<String> getMaxClientId() async { final isar = await Isar.open([ClientSchema]); final clientId = await isar.clients.clientId.max(); return clientId == null ? '10000' : clientId; }
方法二:使用maxBy()(无索引也适用)
如果字段未添加索引,或者需要更灵活的字段选择,可以用maxBy()方法传入字段选择器:
Future<String> getMaxClientId() async { final isar = await Isar.open([ClientSchema]); final clientId = await isar.clients.maxBy((client) => client.clientId); return clientId == null ? '10000' : clientId; }
注意事项
你的clientId是字符串类型,但存储的是'10001'这类数字格式的字符串,Isar会按照字典序比较大小,这种情况下字典序和数字顺序一致,结果符合预期。
内容的提问来源于stack exchange,提问作者Roslan Amir
相关产品推荐
相关产品推荐

