gpt4 book ai didi

java - 针对多个字段的 Firestore 查询过滤器

转载 作者:行者123 更新时间:2023-12-02 10:21:45 26 4
gpt4 key购买 nike

我在进行查询时遇到一些麻烦,该查询允许我过滤多个动态字段。

例如,对于此文档类型,我想使用动态过滤器获取所有文档(我不关心其他字段中的值)。

我无法为所有可能性创建一个复合索引,因为有 25-30 个字段可能成为潜在的过滤器,我达到了 200 个索引的限制。

我还没有找到任何方法将 whereArrayContains 与多个值一起使用。

exemple:
array -> [computer, internet, ps4,switch]
filter -> whereArrayContains("gears", "internet" AND "switch")

因此,如果有人知道我如何实现此目标或任何解决方法...我将非常感激,因为我几天来一直在尝试“解决”这个问题,但没有取得任何成功

过滤器示例:

- internet + wifi + computer = true
- internet + ps4 + tv + xbox = true
- ps4 + xbox = true
- any random génération

文档类型:

1

最佳答案

遗憾的是,您只能使用一个 whereArrayContains() 方法调用来过滤项目。如果您使用多个,将会出现以下错误:

Caused by: java.lang.IllegalArgumentException: Invalid Query. Queries only support having a single array-contains filter.

如果您需要过滤多个属性,则需要更改构造数据库的逻辑,方法是为您拥有的每个单独的过滤器创建一个属性,然后链接 whereEqualTo()方法调用。我知道这听起来有点奇怪,但这就是 Cloud Firestore 的工作原理。

你的架构应该是这样的:

documentId: { 
"computer": true,
"internet": true,
"ps4": true,
"switch": true
}

要查找所有“gears”、“internet”和“switch”项目,您应该使用如下所示的查询:

Query query = yourCollectionRef.
.whereEqualTo("gears", true)
.whereEqualTo("internet", true)
.whereEqualTo("switch", true);

您还可以将这些过滤器存储在 map 中,如以下架构所示:

documentId: {
gears: {
"computer": true,
"internet": true,
"ps4": true,
"switch": true
}
}

相应的查询应如下所示:

Query query = yourCollectionRef.
.whereEqualTo("gears.gears", true)
.whereEqualTo("gears.internet", true)
.whereEqualTo("gears.switch", true);

关于java - 针对多个字段的 Firestore 查询过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54294771/

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