gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:54:41 24 4
gpt4 key购买 nike

我已经编写了一段代码,用于在我的 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();

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

最佳答案

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

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

如果我需要实体键/ID,我会使用 keys-only queries - 获取 key ,从中我可以轻松获取:

  • 本地 key ID,无需进行实际的数据存储调用(在 python 中通过 key.id(),我不知道 java 的等效项)
  • 通过直接键查找的实体,可以是 batched为了提高效率。

关于java - 如何从 com.google.datastore.v1.Entity 获取数据存储区实体 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56023889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com