google-app-engine - 使用 Dart 按 Google 数据存储中的 KeyProperty 进行过滤

标签 google-app-engine dart google-cloud-datastore google-managed-vm

我尝试运行一个过滤 KeyProperty 的查询。 我目前使用的dart gcloud包版本是:0.2.0+8

对于这样的模型:

@Kind(idType: IdType.String)
class Foo extends Model {
  @ModelKeyProperty(indexed: true, required: true)
  Key bar;
}

我想像这样运行查询:

Query query = new Query(db, Foo);
query.filter('bar =', someKey);
var result = query.run();

但我收到以下错误:

Uncaught error in request handler: ApplicationError: Cannot encode unsupported Key type.
#0      Codec.encodeProperty (package:appengine/src/api_impl/raw_datastore_v3_impl.dart:319:7)
#1      DatastoreV3RpcImpl.query (package:appengine/src/api_impl/raw_datastore_v3_impl.dart:527:43)
#2      Query.run.<anonymous closure> (package:gcloud/src/db/db.dart:232:28)

最佳答案

假设

import 'package:gcloud/datastore.dart' as datastore;
import 'package:gcloud/db.dart';

在我之前的实验中,我记得必须将Key(来自db.dart)转换为datastore.Key。我不知道为什么这个 API 需要这个,而其他 API 却正确处理 db.Key,所以我无法判断它是否是一个错误,但以下应该可以工作:

await db.withTransaction((Transaction transaction) async {
  // convert the key to a datastore key
  datastore.Key datastoreKey = db.modelDB.toDatastoreKey(someKey);

  // query by bar key
  Query query = transaction.query(Foo, ancestorKey);
  query.filter('bar =', datastoreKey);
  await query.run().listen((Model model) {
    print(model.key.id);
  }).asFuture();
});

关于google-app-engine - 使用 Dart 按 Google 数据存储中的 KeyProperty 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873697/

相关文章:

python - 关于导入的新手 python 错误

dart - 将网页的HTML加载到字符串

asynchronous - 如何在获取 Flutter 中的当前位置时显示加载微调器?

flutter - 水平居中图像,垂直重复

Java Google 数据存储异步调用

python - 凭证无效 - 尝试从 GCE 实例访问 Google Datastore 时出现 401

python - google app engine - ndb 查询只获取 python 中的几列

python - Google App Engine 是否为每个请求运行一个应用程序实例?或所有请求?

mysql - 如何从 Google Cloud SQL 备份存储过程?

python - Google App Engine - 连接到 MySql 数据库 - 意外的关键字参数 'user'