Che*_*ate 4 java google-app-engine objectify google-cloud-datastore
我正在尝试使用谷歌应用引擎数据库,我需要在2个日期范围内获得员工的总薪水.我需要提供小时的范围,即startDate和endDate,以便我如何在数据存储上执行此操作.我在app引擎数据存储区中使用objectify.
看一下客观化维基.在执行查询部分中,有关于如何创建基本查询的示例.
让我们假设您的实体看起来像这样
@Entity
public class Salary {
Ref<Employee> employee;
@Id
Long salaryId;
@Index
Date startDate;
@Index
Date endDate;
Long salaryCents;
}
Run Code Online (Sandbox Code Playgroud)
如果要创建一个考虑最小数据和最大日期值的查询,可以链接过滤器,如下所示:
ofy().load(Salary.class).filter("startDate >", start).filter("startDate <=", end).list();
Run Code Online (Sandbox Code Playgroud)
正如您可以在数据存储区文档中阅读*不等式过滤器最多只能限制一个属性'您不能使用不等式过滤器过滤两个不同的属性,从而使查询像
ofy().load(Salary.class).filter("startDate >", start).filter("endDate <=", end).list();
Run Code Online (Sandbox Code Playgroud)
不可能.
你可以做的是过滤一个属性并过滤Java代码中的内存中的另一个属性.
另一种方法(应该是可能的,虽然我没有尝试过)将获得第一个过滤器的键列表,如下所示:
Iterable<Key<Salary>> keys = ofy().load(Salary.class).filter("startDate >", start).keys();
Run Code Online (Sandbox Code Playgroud)
然后在第二个查询中使用键,如下所示:
ofy().load(Salary.class).filter("salaryId IN", keys).filter("endDate <=", end).list();
Run Code Online (Sandbox Code Playgroud)
请注意,IN过滤器将执行多个查询,因此内存中的方法可能会更快,具体取决于您的数据.
理想情况下,您可以将查询减少到只需要不等式过滤器的一个属性.
| 归档时间: |
|
| 查看次数: |
1718 次 |
| 最近记录: |