我们正在使用gcloud
dart库来访问数据存储区。我们想显示用户总数。
当然,最简单的方法是:
db.query(User).run().length
但这会获取所有用户。
有没有办法使用dart gcloud库有效地运行此查询?如果没有,查询所有实体是一个很大的性能问题,我们应该将用户总数存储在一个单独的实体中吗?
答案 0 :(得分:3)
Google Cloud Datastore提供了许多特殊实体种类,它们使用保留的__xxx__
名称,可用于查询数据存储区元数据。
使用这种机制可以例如使用__namespace__
查询所有名称空间,使用__kind__
查询所有名称空间。 package:gcloud已包含用于此目的的特殊Kind和Namespace种类。
用户可以仅定义任何其他元数据类型,以查询种类计数。
这是一个允许人们在Dart中计算实体的片段:
import 'dart:async';
import 'package:appengine/appengine.dart';
import 'package:gcloud/db.dart';
Future main(List<String> args) async {
await withAppEngineServices(() async {
print(await getStats('Package'));
print(await getStats('PackageVersion'));
});
}
Future<Stats> getStats(String kind) async {
final query = dbService.query(Stats)..filter('kind_name =', kind);
final Stats stats = (await query.run().toList()).first;
return stats;
}
@Kind(name: '__Stat_Kind__', idType: IdType.String)
class Stats extends ExpandoModel {
@StringProperty(propertyName: 'kind_name')
String kindName;
@IntProperty()
int count;
String toString() => 'Stats(kind: "$kindName", count: $count)';
}