Google Cloud Datastore 过滤包含列表中项目的数据
Posted
技术标签:
【中文标题】Google Cloud Datastore 过滤包含列表中项目的数据【英文标题】:Google Cloud Datastore filter data which contains the items in a List 【发布时间】:2019-11-28 10:47:56 【问题描述】:在我们的 Google Cloud Datastore 中,我们有一个属性(companies 属性),它存储字符串列表,当我们查询我们的数据存储时,我们希望将 Java 列表发送到数据存储 API 并获取公司属性至少包含的数据列表中的项目之一。我们当前的查询代码在下面,但是我们无法找到如何在此代码上设置列表过滤器。有人知道吗?
public List<MAExchangeNews> getExchangeNews(IExchangeController controller,int count, String offsetVal, List<String> relatedCompanySymbols)
List<MAExchangeNews> result = null;
if (controller != null)
EntityQuery.Builder builder = Query.newEntityQueryBuilder();
builder.setKind(KIND_NAME);
builder.setLimit(count);
builder.setOrderBy(OrderBy.desc(FIELD_NEWS_TIME));
if (offsetVal != null)
builder.setStartCursor(Cursor.fromUrlSafe(offsetVal));
if (relatedCompanySymbols != null)
//This is the area we want to add our filtering code //builder.setFilter(PropertyFilter.Operator.GREATER_THAN_OR_EQUAL_VALUE);
Query<Entity> query = builder.build();
QueryResults<Entity> resultList = datastore.run(query);
result = entitiesToNews(controller,resultList);
if (result != null)
this.nextOffset = resultList.getCursorAfter().toUrlSafe();
return result;
作为示例,我们想要实现的目标:
- Our DataStore Entities Company Properties :
1. FROTO, KCHOL
2. KCHOL, ALBRK
3. AKBNK, GARAN
4. ALBRK, ACSEL
- Our query List
1. KCHOL,GARAN
- Expected Result:
1. FROTO, KCHOL
2. KCHOL, ALBRK
3. AKBNK, GARAN
我认为我们需要的是一个包含查询,其中包含 or 语句(如果可能的话),或者一个 in 查询。但我不知道我们如何使用 Google Cloud Datastore API 来实现它。
谢谢
【问题讨论】:
【参考方案1】:我不熟悉java。但谷歌云数据存储一点点。
Google Cloud Datastore 有五种类型的过滤器(=
、<
、<=
、>
、>=
)
on query 所以你只能使用一个 out of filter。
为了得到 1 的结果。KCHOL,GARAN 您可以尝试使用两个查询,第一个查询为 KCHOl 查找数据,第二个查询为 GARAN 查找数据并合并它。
Google Cloud Datastore 中没有与 In 类似的内容。 可能此指南有助于找到您的解决方案。
【讨论】:
【参考方案2】:我不得不说,我对此没有任何实际经验。根据我在 API 文档中找到的内容,可以像这样添加过滤器:
if (relatedCompanySymbols != null && !relatedCompanySymbols.isEmpty())
builder.setFilter(new FilterPredicate("companies", Query.FilterOperator.IN, relatedCompanySymbols));
不确定这是否可行,但有关过滤器的文档说明:
如果给定名称的属性是数组值,则实体 如果任何值与该值比较,则满足过滤器 以比较描述的方式在过滤器中指定 运算符。
【讨论】:
以上是关于Google Cloud Datastore 过滤包含列表中项目的数据的主要内容,如果未能解决你的问题,请参考以下文章
库 appengine.api.datastore 和 com.google.cloud.datastore 有啥区别?
App Engine 上 Cloud Datastore 的客户端库 - NDB 或 google-cloud-datastore
Google Cloud Datastore 客户端库创建实体
在 Google Cloud Datastore 上使用动态类型
Google Cloud Datastore Emulator 如何验证我们的 datastore-index.xml?