gpt4 book ai didi

google-app-engine - 按实体中的列表对象化查询过滤器包含搜索参数

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:57 25 4
gpt4 key购买 nike

在一个应用程序中,我有一个包含其他实体列表的实体(假设一个事件包含分配的员工列表)

使用 objectify - 我需要找到分配给特定员工的所有事件。

是否有基本的方法来过滤包含参数的查询 - 与

中的查询相反的种类

...快速伪代码

findAll(Employee employee) {
...
return ofy.query(Event.class).filter("employees.contains", employee).list();
}

任何帮助将不胜感激


看到这个 http://groups.google.com/group/objectify-appengine/browse_thread/thread/77ba676192c08e20 后,我试着只做 filter("employees", employee) - 但不幸的是,这会返回一个空列表

目前我正在做一些非常低效的事情 - 经历每个事件,遍历员工并将他们添加到一个新列表(如果它包含给定的员工)只是为了有一些有用的东西 - 我知道这是不对的


让我补充一点,

上面的查询实际上不是什么,我只是在使用它,因为我认为这不会有什么不同。

Employee 和 Events 与 Business 作为父级在同一个实体组中

我使用的实际查询如下

ofy.query(Event.class).ancestor(businessKey).filter("employees", employee).list();

不幸的是,这仍然返回一个空列表 - 那里的祖先(键)是否弄乱了过滤器?


解决办法,employees字段没有正确索引。

我添加了 datastore-indexes 文件来创建一个复合索引,但最初测试的是我在 employees 字段被索引之前添加的值,这是我在做的愚蠢的事情 - 只是在“业务”上建立索引领域和“员工”领域固定一切。 datastore-indexes 文件似乎不是必需的,在删除它并重试后一切正常。

最佳答案

通常,您可以通过以下两种方式之一执行此操作:

Put a property of Set<Key<Employee>> on the Event

Put a property of Set<Key<Event>> on the Employee

您也可以创建一个关系实体,但如果您只是对计数相对较低的值进行过滤,通常将 set 属性放在一个实体或另一个实体上会更容易。

然后按照您的描述过滤:

ofy.query(Event.class).filter("employees", employee).list()

ofy.query(Employee.class).filter("events", event).list()

列表属性应包含目标实体的键。如果您将一个实体传递给 filter() 方法,Objectify 会理解您想要按键过滤。

关于google-app-engine - 按实体中的列表对象化查询过滤器包含搜索参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9867401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com