Firestore(在数据存储模式下)文档说:
数据存储模式对每个唯一的数组属性值索引一次。因此,要查询数组是否包含值,请使用相等过滤器。
这条语句意味着你只能用相等过滤器查询一个值。然而,还有这个例子,下面的注解说:
与不等式筛选器不同,多个相等筛选器可用于查询包含一组值的实体。
Query<Entity> query =
Query.newEntityQueryBuilder()
.setKind("Task")
.setFilter(
CompositeFilter.and(
PropertyFilter.eq("tag", "fun"), PropertyFilter.eq("tag", "programming")))
.build();
字符串
我对这个查询能做什么感到困惑。这是否意味着这个查询将:
a)返回任务实体,其中“tag”字段是一个数组,并且数组仅包含值“fun”和“programming”
或/和
B)返回任务实体,其中“tag”字段是一个具有许多不同值的数组(例如["fun", "programming", "algo", "interview"]
),但其中至少有两个是“fun”和“programming”?
文档中的示例似乎与Firestore中的array-contains-any示例相似,但不清楚其限制/能力是什么。
1条答案
按热度按时间mctunoxg1#
您在问题中提供的代码使用了两个相等过滤器。因此查询将搜索
tag
数组属性中具有值fun
和programming
的实体。请记住,CompositeFilter.and()方法将两个PropertyFilter.eq()
过滤器合并为一个过滤器,该过滤器需要满足两个条件。因此,它是AND
操作,而不是但是,tag
可以包含多个值,而不仅仅是这两个值。