2016-12-06 15 views
5

Я использую предок запрос для получения объекта из Google датасторе используя nodejsКак получить полный ключ из возвращаемого объекта запроса-предка в datastore google?

query = datastore.createQuery(entity).hasAncestor(key)

где ключ

key = datastore.key([kind_name_of_parent, id_of_parent])

Я могу извлекать объекты, но я хотел бы получить полный ключ восстановленного объекта, тогда как возвращенный массив содержит только возвращаемые объекты и endCursor.

Как я могу получить полный ключ? или, могу ли я получить полный ключ от endCursor?

Пример моего результата запроса является:

[{ modTS: 1481006473081, modLoc: null, modUid: 0, createTS: 1481006473081 } ], { moreResults: 'NO_MORE_RESULTS', endCursor: 'CloSVGoTc350ZXN0cHJvamVjdC0zN2ZiNnI9CxIEdXNlchiAgID409OICgw‌​LEgRzaW1zGICAgICAgIA‌​KDAsSDmNsaWVudFNldHR‌​wsdrfGICAgICA5NEKDBg‌​AIAA=' } ]

ответ

2

Поскольку хранилищу клиент v0.42.2 ключ теперь обозначается с помощью Symbol на датастора клиента datastoreClient.KEY.

Запустите это на CLI, если он не работает в первый раз, запустите его снова (первый раз может завершиться неудачно из-за «возможной согласованности»).

'use strict'; 

const Datastore = require('@google-cloud/datastore'), 
    projectId = 'your-project-id', 
    datastore = Datastore({ 
     projectId: projectId 
    }), 
    pkind = 'Foo', 
    pname = 'foo', 
    kind = 'Bar', 
    name = 'bar', 
    parentKey = datastore.key([pkind, pname ]), 
    entityKey = datastore.key([pkind, pname, kind, name]), 
    entity = { 
     key: entityKey, 
     data: { 
      propa: 'valuea' 
     } 
    }, 
    query = datastore.createQuery().hasAncestor(parentKey).limit(5); 

let complete = false; 

datastore.save(entity).then(() => { 
    datastore.runQuery(query).then((res) => { 
     try { 
      console.log('parent key ', res[0][0][datastore.KEY].parent); 
     } finally { 
      complete = true; 
     } 
    }); 

}); 

function waitUntilComplete() { 
    if (!complete) 
     setTimeout(waitUntilComplete, 1000); 
} 

waitUntilComplete(); 
+0

res [0] [datastore.KEY] is print undefined –

+0

Какую версию @ google-cloud/datastore вы используете? Я использую 0.5.1. –

+0

даже я использую 0.5.1 –

1

Ключи были получены с помощью: res[0][0][datastore.KEY]

2

Последнее обновление хранилища данных SDK изменил способ ключи, доступ в сущности.

Раньше у объекта был ключ с именем key, который имел полный объект JSON с информацией о ключе.

После обновления ключ теперь передается с использованием Symbols, нового типа данных ES6.

Ключ будет называться с использованием entity[datastoreClient.KEY], если datastoreClient является правильно аутентифицированным/инициализированным объектом SDK данных.