【问题标题】:How do I 'filter in' firestore data satisfying 'contains' condition?如何“过滤”满足“包含”条件的 Firestore 数据?
【发布时间】:2020-11-02 08:19:06
【问题描述】:

Query query = fireStore.collection("Requests").whereEqualTo("City",Noida);

当 City 节点具有确切值(“本例中为 Noida”)但我想检索“City”包含需要数据的所有数据时,此查询有效

例如: 当城市 = 诺伊达 这个案子正在奏效。 我想做的是

当城市 = 诺伊达 sec-32 如果我输入 Noida,它仍然会搜索 Noida sec-32

【问题讨论】:

  • 您是否尝试过使用"array-contains-any"?这总是按数组数据类型过滤。
  • 不,那是另一回事,这为我提供了 firebase 中每个同名节点的值。

标签: firebase android-studio google-cloud-firestore google-cloud-functions


【解决方案1】:

我不认为你可以直接实现它。但我可以建议你一种方法。您可以向文档中添加另一个字段,例如 "sector" 您可以在其中存储城市的郊区。

例如。你可以有city = "noida" 和sector = "sector 32"。

像这样你可以查询城市,然后得到部门 也是。

【讨论】:

    【解决方案2】:

    Firestore 中没有根据需要查询子字符串的查询。

    但是对于小型数据集有一种解决方法,它包括查询所有数据并保存在一个变量中(在你的情况下,获取所有城市名称)并使用contains() 方法,如下所示:

    Query query = fireStore.collection("Requests");
    String str1 = document.getString("City");
    String str2 = "Noida";
    boolean b = str1.toLowerCase().contains(str2.toLowerCase());
    

    如果你打印 b 的值,如果它匹配它将返回 true,如果不是 false。但上述示例仅适用于 small 数据集,因为它对于大数据集效率不高。在这种情况下,正如official documentation 建议的那样,您可以使用Algolia 等第三方搜索服务启用对您的Cloud Firestore 数据的全文搜索。

    【讨论】:

    • 感谢您的宝贵时间。您考虑在一个小数据集中有多少数据条目?
    • 这只适用于小数据集,因为复杂度是 n^2,所以如果你有 1000 个元素,复杂度将是 1000000。据我说,少于 100 个元素将被视为小数据集它将具有 100 000 次读取的复杂性。
    • 好的,现在我明白了。谢谢
    • 如果我的回答对您有用,请您接受。
    • 哦,对不起,如果您认为这可以帮助其他人,请您也标记这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多