dart 如何在Flutter的Isar数据库中使用.max()聚合函数?

cnjp1d6j  于 2022-12-30  发布在  Flutter
关注(0)|答案(1)|浏览(258)

我正在学习如何在Flutter应用程序中使用Isar数据库。我正在尝试获取列的最大值。Isar文档建议我可以使用.max()聚合函数,但没有给予如何在查询中实际使用它的示例。
下面是我的代码。我想有人建议我把什么地方的<rest_of_query_here>。我试图把它放在.where().filter(),甚至.findAll()后,但没有一个是可以接受的。

part 'client.g.dart';

@collection
class Client {
  Id id = Isar.autoIncrement; // you can also use id = null to auto increment

  @Index(type: IndexType.value)
  String? clientId; // actually a number of the form '10001','10002',...

  String? lastname;
  String? firstname;
}

...
// We should use .max() somewhere in the query
Future<String> getMaxClientId() async {
  final isar = await Isar.open([ClientSchema]);
  final clientId = await isar.clients.<rest_of_query_here>;
  return clientId == null ? '10000' : clientId;
}
...
6jygbczu

6jygbczu1#

根据本文档,您需要运行一个属性查询来使用.max()操作。属性查询隔离并返回一个属性(如果用SQL术语考虑,则为列),然后您可以对该属性运行 * 聚合操作 ,如 .max().min().sum().average()*。
对于您的示例,请将该行替换<rest_of_query_here>为以下内容:

final clientId = await isar.clients.where().clientIdProperty().max();

相关问题