为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 com.google.datastore.v1.Entity 获取数据存储实体 ID

如何从 com.google.datastore.v1.Entity 获取数据存储实体 ID

慕斯709654 2022-11-10 10:17:20
我在我的 Google Cloud Dataflow 程序中编写了一个从 Google Datastore 获取数据的代码。我能够获取实体的所有字段,除了自动生成的字段 Id 字段。我曾尝试使用 entity.getKey() 但我得到了空值。下面是我的代码片段,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 获取所有字段。
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

注:本人不是java用户,根据python经验回答

实际上,在常规查询结果中返回的实体不包含实体键/ID。尝试从实体中获取它的效率相当低 - 您需要访问每个单独实体的数据存储区(甚至不考虑为什么这似乎对您不起作用)。

如果我需要实体键/ID,我会改为使用仅键查询- 获取键,我可以轻松地从中获取:

  • 本地的密钥 ID,无需进行实际的数据存储调用(在 python viakey.id()中,我不知道 java 等效项)

  • 通过直接键查找的实体,可以批处理以提高效率。


查看完整回答
反对 回复 2022-11-10
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

entity.getKey().getPathList().get(0).getId()

这有助于我实现结果。通过 getKey 方法获取实体 ID。


查看完整回答
反对 回复 2022-11-10
  • 2 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号