如何从谷歌数据存储中的祖先查询返回的对象检索完整的密钥?
我正在使用祖先查询来检索使用nodejs从谷歌数据存储的实体
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: 'CloSVGoTc350ZXN0cHJvamVjdC0zN2ZiNnI9CxIEdXNlchiAgID409OICgwLEgRzaW1zGICAgICAgIAKDAsSDmNsaWVudFNldHRwsdrfGICAgICA5NEKDBgAIAA=' } ]
由于数据存储客户端v0.42.2密钥现在使用数据存储客户端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();
数据存储区SDK的最新更新改变了在实体中访问密钥的方式。
早些时候,实体拥有一个名为key
,它具有完整的JSON对象以及密钥的信息。
更新之后,现在使用符号 (一种新的ES6数据types)引用密钥。
假设datastoreClient
是datasotore SDK的正确validation/初始化对象,则将使用entity[datastoreClient.KEY]
引用密钥。
这些密钥是通过res[0][0][datastore.KEY]