Google app engine 如何在AppEngine上的数据存储中实现where子句
此API的目的是列出某个Google app engine 如何在AppEngine上的数据存储中实现where子句,google-app-engine,google-cloud-endpoints,google-cloud-datastore,objectify,Google App Engine,Google Cloud Endpoints,Google Cloud Datastore,Objectify,此API的目的是列出某个用户电子邮件地址拥有的所有服务器 如果删除该过滤器,则该方法将返回所有服务器(如预期的那样)。问题是,我需要按特定的电子邮件地址进行筛选,该地址只会返回以下结果: { "kind": "serverApi#resources", "etag": "\"q4aBTdWQBYSnhbijLrKGtcu63OU/cXL3GSvQ29gE3tK-4VKxQrWjAt0\"" } 我期待的结果类似于: { "items": [ { "id": "1", "h
用户
电子邮件地址拥有的所有服务器
如果删除该过滤器,则该方法将返回所有服务器(如预期的那样)。问题是,我需要按特定的电子邮件地址进行筛选,该地址只会返回以下结果:
{
"kind": "serverApi#resources",
"etag": "\"q4aBTdWQBYSnhbijLrKGtcu63OU/cXL3GSvQ29gE3tK-4VKxQrWjAt0\""
}
我期待的结果类似于:
{
"items": [
{
"id": "1",
"hostname": "aaa",
"ip": "192.168.1.2",
"mac": "00:00:00:00:00:00",
"user": "a@b.c",
"domain": "HOME",
"kind": "serverApi#resourcesItem"
},
{
"id": "2",
"hostname": "bbb",
"ip": "192.168.1.1",
"mac": "00:00:00:00:00:00",
"user": "a@b.c",
"domain": "HOME",
"kind": "serverApi#resourcesItem"
},
{
"id": "3",
"hostname": "ccc",
"ip": "192.168.1.3",
"mac": "00:00:00:00:00:00",
"user": "a@b.c",
"domain": "HOME",
"kind": "serverApi#resourcesItem"
},
{
"id": "4",
"hostname": "ddd",
"ip": "192.168.1.4",
"mac": "00:00:00:00:00:00",
"user": "a@b.c",
"domain": "HOME",
"kind": "serverApi#resourcesItem"
}
],
"kind": "serverApi#resources",
"etag": "\"q4aBTdWQBYSnhbijLrKGtcu63OU/cXL3GSvQ29gE3tK-4VKxQrWjAt0\""
}
我在端点上使用的代码
public CollectionResponse<Server> listServerByUser(User user) throws OAuthRequestException {
List<Server> records = new ArrayList<Server>();
Query<Server> query = ofy().load().type(Server.class).filter("mUser", user.getEmail());
QueryResultIterator<Server> iterator = query.iterator();
while (iterator.hasNext()) {
records.add(iterator.next());
}
return CollectionResponse.<Server>builder().setItems(records).build();
}
public CollectionResponse listServerByUser(用户用户)引发OAuthRequestException{
列表记录=新的ArrayList();
Query Query=ofy().load().type(Server.class).filter(“mUser”,user.getEmail());
QueryResulterator迭代器=query.iterator();
while(iterator.hasNext()){
add(iterator.next());
}
return CollectionResponse.builder().setItems(records.build();
}
AppEngine仪表板上的数据存储查看器中显示的列:
ID/Name
mDomain
mHostname
mIp
mMac
mUser
如果mUser属性未编制索引,则在筛选器中使用它时将找不到任何结果。您需要为正在进行筛选或排序的属性编制索引 由于您使用的是Objectify,因此需要使用适当的
@Index
注释编辑User
类
以下是索引过程的完整指南
添加注释后,索引过程不会追溯。
您需要再次将所有实体放入每个实体的属性中(一个简单的get+put和Objectify就足够了)不清楚问题是什么:您没有得到您期望的所有记录,或者该记录返回了您期望的不同数据。请澄清。我希望收到4个结果。电子邮件地址匹配。我看到您实际使用的是Objectify,并且您使用的字符串格式正确[1](无运算符表示等于)。可能您在错误的属性上进行了筛选(如果是“mUser”,则为“user”),或者user.getEmail()没有返回您认为的内容?[1] ,java.lang.Object)这很可能是我的问题。如何向列添加索引?如果有帮助的话,我正在使用Android Studio。我找到了这份文件,是否正确?您不需要为单个属性添加索引定义。您需要对要索引的属性进行注释。这看起来非常有希望。今天早上检查时,我没有看到那个注释。今天晚些时候我会再检查一遍。提供的文档链接也非常具有描述性。“查询只返回索引中的值。如果实体字段未被索引,则该字段上的查询将不会返回结果”这句话,如果我早点发现的话,会节省我很多时间!