簡體   English   中英

Google Cloud Datastore過濾包含List中項目的數據

[英]Google Cloud Datastore filter data which contains the items in a List

在我們的Google Cloud Datastore中,我們有一個存儲字符串列表的屬性(公司屬性),當我們查詢數據存儲區時,我們希望將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

我認為我們需要的是一個包含查詢或其中的語句(如果可能),或者在查詢中。 但我不知道如何使用Google Cloud Datastore API實現它。

謝謝

我不得不說,我對此沒有任何實際經驗。 根據我在API文檔中找到的,可以添加一個過濾器,如下所示:

if (relatedCompanySymbols != null && !relatedCompanySymbols.isEmpty()) {
    builder.setFilter(new FilterPredicate("companies", Query.FilterOperator.IN, relatedCompanySymbols));
}

不確定這會有效,但文檔說明過濾器:

如果給定名稱的屬性是數組值,則如果任何值與比較運算符描述的方式中的過濾器中指定的值進行比較,則實體滿足過濾器。

我不熟悉java。 但與谷歌雲數據存儲有點不同。 Google Cloud Datastore在查詢時有五種類型的過濾器( =<<=>>= )因此您只能使用一個過濾器。

為了獲得1. {KCHOL,GARAN}的結果,你可以嘗試兩個查詢,首先查詢KCHOl的數據,然后查找GARAN的第二個查詢並合並它。

Google雲端數據存儲中沒有任何類似的In包含。 可能是這個指導有助於找到您的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM