每次运行datastore.runQuery时出错:必须设置Query.Query和Query.gql_Query字段之

Error every time I run datastore.runQuery: one of fields Query.query and Query.gql_query must be set

本文关键字:Query 设置 gql 字段 datastore 运行 runQuery 出错      更新时间:2023-09-26

我正试图使用Google-api-nodejs客户端对我的GoogleCloud数据存储运行一个简单的查询。我想查询与给定种类匹配的所有实体。当我使用"立即尝试"工具运行此查询时,它运行良好:

Request
POST https://www.googleapis.com/datastore/v1beta2/datasets/healthier-staging/runQuery?key={YOUR_API_KEY}
{
 "query": {
  "kinds": [
   {
    "name": "Subscriber"
   }
  ]
 }
}
Response
200 OK
{
 "batch": {
  "entityResultType": "FULL",
  "entityResults": [
   {
    "entity": {
     "key": {
      "partitionId": {
       "datasetId": "s~healthier-staging"
      },
      "path": [
       {
        "kind": "Subscriber",
        "name": "+1215XXXXXXX"
       }
      ]
     },
     "properties": {
...

我可以使用我的凭据进行身份验证,创建事务等,所以我知道这不是身份验证问题。

这是我试图在Node中运行的代码:

this.datastore.runQuery({
    datasetId: 'healthier-staging',
    query: {
        kinds: [{name: 'Subscriber'}]
    },
}, (function(err, result) {
    if (err) {
        console.error(err);
        return;
    }
}).bind(this));

当我尝试使用Node模块运行相同的查询时,我会得到以下错误:

{ [Error: one of fields Query.query and Query.gql_query must be set]
  code: 400,
  errors: 
   [ { domain: 'global',
       reason: 'INVALID_ARGUMENT',
       message: 'one of fields Query.query and Query.gql_query must be set' } ] }

这没有意义,因为我已经指定了query字段。我尝试了各种方法:删除datasetId(产生关于需要datasetId的错误),使用gql_query(相同错误),将datasetId封装在事务中并在readOptions中传递,等等

这是虫子还是我在做傻事?

谢谢!

我在您的另一个StackOverflow问题中提到了这一点,但您的请求应该包含在资源部分:

this.datastore.runQuery({
    datasetId: 'healthier-staging',
    resource: {
        query: {
            kinds: [{name: 'Subscriber'}]
        },
    },
}, (function(err, result) {
    if (err) {
        console.error(err);
        return;
    }
}).bind(this));