firebase 在Firestore(数据存储模式)中,数组字段上的多个相等过滤器是如何工作的?

qyswt5oh  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(129)

Firestore(在数据存储模式下)文档说:
数据存储模式对每个唯一的数组属性值索引一次。因此,要查询数组是否包含值,请使用相等过滤器。
这条语句意味着你只能用相等过滤器查询一个值。然而,还有这个例子,下面的注解说:
与不等式筛选器不同,多个相等筛选器可用于查询包含一组值的实体。

  1. Query<Entity> query =
  2. Query.newEntityQueryBuilder()
  3. .setKind("Task")
  4. .setFilter(
  5. CompositeFilter.and(
  6. PropertyFilter.eq("tag", "fun"), PropertyFilter.eq("tag", "programming")))
  7. .build();

字符串
我对这个查询能做什么感到困惑。这是否意味着这个查询将:
a)返回任务实体,其中“tag”字段是一个数组,并且数组仅包含值“fun”和“programming”
或/和
B)返回任务实体,其中“tag”字段是一个具有许多不同值的数组(例如["fun", "programming", "algo", "interview"]),但其中至少有两个是“fun”和“programming”?
文档中的示例似乎与Firestore中的array-contains-any示例相似,但不清楚其限制/能力是什么。

mctunoxg

mctunoxg1#

您在问题中提供的代码使用了两个相等过滤器。因此查询将搜索tag数组属性中具有值funprogramming的实体。请记住,CompositeFilter.and()方法将两个PropertyFilter.eq()过滤器合并为一个过滤器,该过滤器需要满足两个条件。因此,它是AND操作,而不是但是,tag可以包含多个值,而不仅仅是这两个值。

相关问题