我正在尝试创建一个查询,以便给定列表(参数)的所有项都包含在表的列中(也是一个列表)。我还需要一个查询,以便给定列表(参数)中的至少一个项目包含在表格的列中。例如:
JDO:
Table: User
| ID | Name | Interests <List of Strings> |
查询:
List <String> gifts; // Item to query with
如何查询所有兴趣与所有礼品相匹配的用户?即所有礼物都应该是利益的一部分。
如何查询其兴趣与某些(至少一个)礼物相匹配的所有用户?即至少一件礼物是兴趣的一部分。
如何查询所有与兴趣相符的用户?即所有利益都应该是礼物的一部分。
如何查询SOME(至少一个)兴趣与礼品相匹配的所有用户?即至少一项利息是礼物的一部分。
这些查询是否可行?如果是这样呢?我可以使用.contains()
关键字来执行这些查询吗?如果是这样,那怎么样?有人可以分享一些例子吗?任何帮助都将受到高度赞赏。
谢谢。
答案 0 :(得分:0)
为了理解这些查询的工作方式(或不工作方式),了解数据存储区如何为实体编制索引非常重要。插入具有list属性的实体时,数据存储区会将每个列表条目分成单独的索引行。例如,以下实体:
Entity(User):
id=15
name="Jim"
interests=["Drinking", "Banjos"]
将导致自动索引中的以下索引条目:
(User, "id", 15, Key("User", 1))
(User, "name", "Jim", Key("User", 1))
(User, "interests", "Drinking", Key("User", 1))
(User, "interests", "Banjos", Key("User", 1))
如果您还在(名称,兴趣)上定义了一个复合索引,那么其中的条目将如下所示:
("Jim", "Drinking", Key("User", 1))
("Jim", "Banjos", Key("User", 1))
有了这个,我们可以按顺序解决您的特定查询查询:
对于数字1和3,你可以通过做一个较粗糙的过滤器 - 例如,搜索一个或两个兴趣 - 并在内存中过滤结果以获得完全匹配。