【问题标题】:firestore query filter based on a collection基于集合的firestore查询过滤器
【发布时间】:2018-11-20 09:04:11
【问题描述】:

我在 Firestore 中有一个 book 集合,按照设计,每个文档都有一个 id(比如说它是整数 id,例如 0、1、2..);我想通过过滤文档idrandom 集合来查询集合,例如[2, 5, 23, 54],请注意这些 id 是随机的,所以我不能使用像 isGreaterThan 这样的范围过滤器。 我想避免为每个过滤的 id 查询一次,因为它可能会读取数据库太多次(这可能会很昂贵)。

我尝试使用 Firestore.instance.collection('book')where('id', array_contains:[ filtered id]) 但这不起作用,因为 id 不是集合字段。

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    目前您无法在array_contains 中进行or 查询,这绝对是人们想要的功能,因此我建议您记录您的feature request with support。但是与此同时,由于您的查询不会相交,因此仅执行单个查询并将结果汇​​总到一个主数组中的成本相同。不确定你的语言,所以不能举个例子,但它只是在你的例子中做 4 个查询,并让它们都更新一个主数组。

    【讨论】:

    • 你能举一个使用Java或JS的例子吗?
    • 当然,这个 stackoverflow 答案有一个很好的例子,它用于实时数据库,但它的概念相同 - stackoverflow.com/a/41785378/1614889
    • 抱歉,您能否详细说明“查询不会相交,只是...的成本相同”您是说多次读取的成本与读取一次的成本相同(如果支持查询)?
    • 您基本上是在查询中执行 4 次获取,因为您需要 4 个特定文档。因此,如果您执行 4 次指定获取那些文件,那就是 4 次读取。如果存在该查询以执行操作,否则它将返回 4 个结果,即 4 次读取。所以价格一样。唯一可能变得更昂贵的情况是,如果您正在查询具有 x 标签或 y 标签的文档,然后您可能会有重复,这会导致从数据库中读取更多。
    • 哦,所以如果确实存在理想的查询,它无论如何都会有效地进行 4 次读取,因此成本与我单独阅读每个 4 文档的成本相同吗?不知道,谢谢!
    猜你喜欢
    • 2018-03-22
    • 1970-01-01
    • 2021-02-26
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2020-10-22
    • 2019-07-31
    相关资源
    最近更新 更多