我对数据操作很感兴趣,我希望通过Ref字段对查询结果进行排序。
假设我有以下数据对象。
EmployeeDO {Long id,String name,Ref refCompany}
CompanyDO {Long id,String name}
现在我想查询按公司名称排列的员工。
我尝试了查询
Query<EmployeeDO> query = ofy().load().type(EmployeeDO.class).order("refCompany");
显然,这并未对公司名称进行排序,但这也成功编译。
请建议是否可以通过这种方式进行此类排序或尝试其他一些解决方法?
答案 0 :(得分:0)
如果您使用@Index refCompany,您可以通过refCompany订购,但它不会按公司名称排序 - 它将按键索引(如果您不使用@Parent,只是一个id订单)。
有两种“通常”选择:
将数据加载到ram中并在那里排序。这就是RDBMS在内部所做的事情。 GAE不支持连接并不完全正确;只是你是查询计划员。
对companyName进行非规范化和预索引。将@Index companyName
放在EmployeeDO中。如果您的魔术排序表现不佳(例如,员工太多),那么您就可以使用RDBMS。