繁体   English   中英

如何从 com.google.datastore.v1.Entity 获取 Datastore 实体 ID

[英]How to get Datastore entity id from com.google.datastore.v1.Entity

我在我的 Google Cloud Dataflow 程序中编写了一段代码来从 Google Datastore 获取数据。 我能够获取实体的所有字段,除了 Id 字段是自动生成的字段。 我尝试使用 entity.getKey() 但我得到的是 null。

下面是我的代码片段,

Datastore datastore = DataflowDatastoreService.getDatastoreObject(null, null, null);
Query.Builder queryBuilder = Query.newBuilder();
Filter filter1 = Filter.newBuilder()
.setPropertyFilter(PropertyFilter.newBuilder()  .setProperty(PropertyReference.newBuilder().setName("cId"))
.setOp(PropertyFilter.Operator.EQUAL)
.setValue(Value.newBuilder().setIntegerValue(1059438885900008L).build()).build()).build();

Filter filter2 = Filter.newBuilder()
.setPropertyFilter(PropertyFilter.newBuilder()
.setProperty(PropertyReference.newBuilder().setName("active"))
.setOp(PropertyFilter.Operator.EQUAL)
.setValue(Value.newBuilder().setBooleanValue(Boolean.TRUE).build()).build()).build();

Filter composeFilter = Filter.newBuilder().setCompositeFilter(CompositeFilter.newBuilder()
                    .addFilters(filter1).setOp(Operator.AND).addFilters(filter2).build()).build();
            queryBuilder.addKind(KindExpression.newBuilder().setName("MyMaster").build());
            queryBuilder.setFilter(composeFilter).build();

RunQueryRequest request = DataflowDatastoreService.makeRequest(queryBuilder.build(), null);
RunQueryResponse response = datastore.runQuery(request);
QueryResultBatch batch = response.getBatch();
List<EntityResult> entityResutls =  batch.getEntityResultsList();
List<Entity> myEntities = new ArrayList<>();

Map<String, Value> entityMap = myEntities(0).getPropertiesMap();

在我的代码中,我能够获取 entityMap 键中的所有字段,但我没有获取键,是否有任何其他方法可以通过 Id 获取所有字段。

注意:我不是java用户,根据python经验回答

实际上,在常规查询结果中返回的实体不包含实体密钥/ ID。 尝试从实体获取它是相当低效的 - 您需要访问每个单独实体的数据存储区(甚至不会查看为什么这似乎不适合您)。

如果我需要实体密钥/ ID,我会使用仅限密钥的查询 - 获取密钥,我可以从中轻松获取:

  • 本地的密钥ID,没有进行实际的数据存储调用(在python中通过key.id() ,我不知道java等价)
  • 实体通过直接键查找,可以批量生效
entity.getKey().getPathList().get(0).getId()

这帮助我实现了结果。 通过getKey方法获取实体Id。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM