首页 > 解决方案 > 带有 AppEngine NodeJS Standard 的过滤器的 Cloud Datastore Projection 查询

问题描述

我正在学习 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));

标签: node.jsgoogle-app-enginegoogle-cloud-platformgoogle-cloud-datastore

解决方案


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


推荐阅读