首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GQL函数与数据存储数据时间查询问题

GQL函数与数据存储数据时间查询问题
EN

Stack Overflow用户
提问于 2018-11-05 19:43:56
回答 1查看 1.5K关注 0票数 1

--这是上下文:

我有一个GCP函数,它必须转到Datastore来获取一些数据,以便将数组返回给客户端。

问题:

当我对代码使用日期时间过滤器时,我无法实现GCP函数返回数据,但是,当我将等效的查询放在GCP Datastore查询控制台上时,我可以实现回滚许多行。

技术数据:

Datastore GQL:

代码语言:javascript
运行
复制
select * from KIND where recordDate >= DATETIME ("2018-10-10T10:10:00.000000+03:00") and recordDate <= DATETIME ("2018-10-11T10:10:00.999999+03:00")

(它工作在GCP数据存储控制台上)

GCP功能代码:

代码语言:javascript
运行
复制
    query = datastore.createQuery(kind).filter('recordDate','>=',dateFrom).filter('recordDate','<=',dateTo);
    console.log(query);

    datastore.runQuery(query, (err,entities) => {
        console.log(err);
        console.log(entities);
    });

(runQuery().总是将null作为err变量返回,并在实体变量上返回一个void )

我需要的帮助:

有人能告诉我一个使用Datetime过滤器返回实体的查询成功的例子吗?

我尝试使用dateFrom和dateTo vars格式的方法:

  • 日期时间("2018-10-10T10:10:00.000000+03:00")
  • 日期(“2018- 10:10:00")
  • 2018-10-10T10:10:00.000000+03:00
  • 2018年-10-10T10:10:00.000000+03:00
  • 日期时间("2018-10-10")
  • "2018-10-10“
  • 日期("2018-10-10")
  • 日期(2018-10-10)
  • 日期时间(2018-10-10T10:10:00.000000+03:00)

没有人工作:

更新(2018-11-19):

在执行runQuery之前,我打印了这个查询,得到以下结果:(我将一些点放置到安全的合理数据中)

代码语言:javascript
运行
复制
    {
      "textPayload": "Query {\n  scope: \n   Datastore {\n     clients_: Map {},\n     datastore: [Circular],\n     namespace: undefined,\n     projectId: '................',\n     defaultBaseUrl_: 'datastore.googleapis.com',\n     baseUrl_: 'datastore.googleapis.com',\n     options: \n      { libName: 'gccl',\n        libVersion: '2.0.0',\n        scopes: [Array],\n        servicePath: 'datastore.googleapis.com',\n        port: 443,\n        projectId: 'c..........' },\n     auth: \n      GoogleAuth {\n        checkIsGCE: undefined,\n        jsonContent: null,\n        cachedCredential: null,\n        _cachedProjectId: 'c..........',\n        keyFilename: undefined,\n        scopes: [Array] } },\n  namespace: null,\n  kinds: [ '....KIND......' ],\n  filters: \n   [ { name: 'recordDate', op: '>', val: 2018-10-10T00:00:00.000Z },\n     { name: 'recordDate', op: '<', val: 2018-10-12T23:59:59.000Z } ],\n  orders: [],\n  groupByVal: [],\n  selectVal: [],\n  startVal: null,\n  endVal: null,\n  limitVal: 20,\n  offsetVal: -1 }",
      "insertId": "............................098...",
      "resource": {
        "type": "cloud_function",
        "labels": {
          "region": "us-central1",
          "function_name": "...................-get-search",
          "project_id": "............."
        }
      },
      "timestamp": "2018-11-19T21:19:46.737Z",
      "severity": "INFO",
      "labels": {
        "execution_id": "792s.....lp"
      },
      "logName": "projects/......./logs/cloudfunctions.googleapis.com%2Fcloud-functions",
      "trace": "projects/........../traces/4a457.......",
      "receiveTimestamp": "2018-11-19T21:19:52.852569373Z"
}

“职能守则”是:

代码语言:javascript
运行
复制
query = datastore.createQuery(kind).filter('recordDate','>',new Date(dateFrom)).filter('recordDate','<',new Date(dateTo)).limit(20);

console.log(query);

var test = datastore.runQuery(query, (err,entities) => {

    console.log(err);
    console.log(entities);

    entities.forEach(entity => {
        console.log(entity);
      });
      return{
          entities:entities,
          err:err
      };
});
console.log(test);
EN

回答 1

Stack Overflow用户

发布于 2018-11-06 17:56:02

当使用客户端库根据datetime属性筛选或排序查询结果时,您应该使用相应语言的本机日期时间表示形式,而不是字符串或GQL结构。

特别是对于您显然使用的node.js,您应该使用Date()对象。下面是来自对查询的限制的一个例子

.createQuery= datastore .createQuery('Task') .filter('created','>',新日期(‘1990-01-01T00:00:00Z’)) .filter('created','<',新日期(‘2000-12-31T23:59:59Z’);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53161156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档