Проблемы с GQL-функциями и датастором Datetime - PullRequest
0 голосов
/ 05 ноября 2018

Это контекст:

У меня есть функция GCP, которая должна перейти в хранилище данных, чтобы получить некоторые данные для возврата массива клиенту.

Проблема:

Я не могу добиться того, чтобы функции GCP возвращали данные, когда я использую фильтры Datetime для своего кода, однако, когда я помещаю эквивалентный запрос в консоль GCP Datastore Query, я могу добиться возврата большого количества строк.

Технические данные:

Datastore GQL:

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 Datastore)

Код функций GCP:

    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 и dateToVars:

  • DATETIME ("2018-10-10T10: 10: 00.000000 + 03: 00")
  • DATETIME ("2018-10-10 10:10:00")
  • "2018-10-10T10: 10: 00,000000 + 03: 00"
  • '2018-10-10T10: 10: 00,000000 + 03: 00'
  • DATETIME ("2018-10-10")
  • "2018-10-10"
  • ДАТА ("2018-10-10")
  • ДАТА ('2018-10-10')
  • DATETIME (2018-10-10T10: 10: 00.000000 + 03: 00)

И никто не работает: (

ОБНОВЛЕНИЕ (2018-11-19):

Я напечатал запрос, прежде чем выполнить runQuery, и получил это: (Я ставлю некоторые точки, чтобы защитить чувствительные данные)

    {
      "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"
}

А код функций:

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);

1 Ответ

0 голосов
/ 06 ноября 2018

При использовании клиентских библиотек для фильтрации или сортировки результатов запроса на основе свойств datetime следует использовать собственное представление datetime на соответствующем языке, а не строки или структуры GQL.

В частности, для node.js, который вы явно используете, вы должны использовать Date() объекты. Вот пример из Ограничения на запросы :

const query = datastore
  .createQuery('Task')
  .filter('created', '>', new Date('1990-01-01T00:00:00z'))
  .filter('created', '<', new Date('2000-12-31T23:59:59z'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...