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

问题描述 投票:0回答:1

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)返回任务实体,其中“标签”字段是一个具有许多不同值的数组(例如

["fun", "programming", "algo", "interview"]
),但其中至少有两个是“有趣”和“编程”?

文档中的示例似乎与 Firestore 中的 array-contains-any 示例类似,但尚不清楚其限制/能力是什么。

firebase google-cloud-platform google-cloud-firestore google-cloud-datastore
1个回答
0
投票

您在问题中提供的代码使用两个相等过滤器。因此,查询正在搜索

fun
数组属性中具有值
programming
tag
的实体。请记住, CompositeFilter.and() 方法将两个
PropertyFilter.eq()
过滤器组合成一个需要满足两个条件的过滤器。所以这是一个
AND
操作,而不是 OR。但是,
tag
可以包含多个值,而不仅仅是这两个值。
    

© www.soinside.com 2019 - 2024. All rights reserved.