我如何在数据存储区查询中使用两个包含

问题描述 投票:0回答:2

我如何在Google Datastore中的单个查询中使用两个.contains。我的代码:

Query query = pm.newQuery("SELECT DISTINCT actualUserEmail FROM packageName :p.contains(actualUserEmail) && :p.contains(OrgUnitPath)");

result = (List) query.executeWithArray(Arrays.asList(data),Arrays.asList(test));

System.out.println("result ="+result.size());

List tempResult = new ArrayList();
tempResult.addAll(result);
return tempResult;

我只得到第一个包含结果。我如何在单个查询中使用两个包含。

google-app-engine google-cloud-datastore jdo datastore
2个回答
0
投票

具有App引擎数据存储区的JDO表现得非常不可预测。 Appengine Datastore API,是更好的替代品。以下是在数据存储区查询中包含多个包含(或IN运算符)的TESTED&TRUSTED方法。我使用google appengine datastore api代替JDO:

样本看起来像:

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
        Filter property1Filter = new FilterPredicate("property1", FilterOperator.EQUAL, value1);
        Filter property2Filter =new FilterPredicate("property2", FilterOperator.IN, valueList1);
        Filter property3Filter =new FilterPredicate("property3", FilterOperator.IN, valueList2);
        Filter compositeFilter= CompositeFilterOperator.and(property1Filter, property2Filter);
        compositeFilterExtended=CompositeFilterOperator.and(compositeFilter, property3Filter);
        com.google.appengine.api.datastore.Query gaeQuery = new Query("DatastoreKind").setFilter(compositeFilterExtended);

        PreparedQuery pq = datastore.prepare(gaeQuery);
        List<Entity> entities = pq.asList(FetchOptions.Builder.withDefaults());     
        return entities;

希望这可以帮助。


0
投票

我得到了答案我在查询中进行了一次更改p&p1工作正常。

Query query = pm.newQuery("SELECT DISTINCT actualUserEmail FROM packageName  :p.contains(actualUserEmail) && :p1.contains(OrgUnitPath)");
result = (List) query.executeWithArray(Arrays.asList(data),Arrays.asList(test));

System.out.println("result ="+result.size());

List tempResult = new ArrayList();
tempResult.addAll(result);
return tempResult;
© www.soinside.com 2019 - 2024. All rights reserved.