【问题标题】:Cloud Datastore Projection Query with filters with AppEngine NodeJS Standard带有 App Engine Node JS Standard 的过滤器的 Cloud Datastore 投影查询
【发布时间】:2018-12-24 15:19:55
【问题描述】:

我正在学习 GCP,并已搜索文档。投影查询文档指出它们可以与过滤器一起使用,尽管有一些限制。据我了解,我没有落入限制范围内,但我仍然无法使其发挥作用。

我想做的很简单

SELECT property FROM kind WHERE enabled = TRUE 

属性被标记为索引,我还部署了一个 index.yaml。我的代码如下

  const selectQuery = programTypeQuery
     .select(entityNameProperty)
     .filter('enabled',true);

注释选择行时,查询有效。在评论过滤器行时,它也可以工作,但是当同时运行两者时,我在邮递员中收到以下消息。

{
"code": 9,
"metadata": {
    "_internal_repr": {}
},
"note": "Exception occurred in retry method that was not classified as transient"
}

我的日志只显示 400 状态错误。

任何帮助将不胜感激

编辑:

这是完整的代码。我有一个参数,指示名称的语言。在数据库中,我有 nameEn 和 nameEs 作为属性,所以我只想返回所选语言的名称。 enabled 是一个布尔属性,指示产品是否处于活动状态。

const Datastore = require('@google-cloud/datastore');
const datastore = Datastore();
const programTypeQuery = datastore.createQuery('programType')

entityNameProperty = 'name' + req.params.languageCode

const selectQuery = programTypeQuery
.select(entityNameProperty)
.filter('enabled',true);

selectQuery.runQuery()
.then((results) => {
res.json(results);
})
.catch(err => res.status(400).json(err));

【问题讨论】:

  • programTypeQueryentityNameProperty 在你的情况下是什么?
  • sample code 中有 .createQuery() 在您的 sn-p 中丢失。你丢弃它有什么具体原因吗?
  • 感谢您的回复,我已添加完整代码

标签: node.js google-app-engine google-cloud-platform google-cloud-datastore


【解决方案1】:

您很可能缺少composite index definition。您应该能够在 stackdriver 中查看您的 GAE 日志,以查看从 Cloud Datastore 返回的错误消息。

由于您的属性名称是动态的,您将无法有效地使用复合索引。您可能需要将数据模型更改为不使用动态属性名称的东西。

【讨论】:

  • 好的。检查了 Cloud Datastore 中的复合索引。这是我的索引:programTypeNameEn ASC 启用 ASC。我会忘记使用动态属性名称。将 .select 行中的代码更改为 .select("propertyNameEn") ,它仍然给出相同的消息。在 App Engine 日志中,我只发现以下内容:“此请求导致为您的应用程序启动一个新进程,从而导致您的应用程序代码首次加载。因此,此请求可能需要更长的时间并使用更多的 CPU对您的应用程序的典型请求。”
【解决方案2】:

根据您提供的详细信息,很难检测出此问题的根源。您可以将Google APIs Explorer 用于Datastore API 并尝试您的查询。我根据您的描述准备了请求体,您可以点击here,只需更改projectId即可执行。通过这样做,您将收到成功的响应或带有详细信息的错误消息,从这里检测根本原因可能会更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多