【问题标题】:How to use startAt() and endAt() in Cloud Firestore?如何在 Cloud Firestore 中使用 startAt() 和 endAt()?
【发布时间】:2018-08-19 11:47:02
【问题描述】:

我从question 中读到了 Dan McGrath 的回答,他说在 Firestore 中有以下代码行的等价物:

myRef.startAt(searchText).endAt(searchText + "\uf8ff");

这条线在 Firebase 实时数据库中完美运行,但我试图在 Cloud Firestore 中找到等价的东西好几天了。谁能帮我解决这个问题?

提前致谢!

【问题讨论】:

  • 如果您要问的话,您可以在 firestore 中使用 startAt()
  • @PeterHaddad 怎么样?请在 Firestore 中为我提供完全相同的版本。谢谢!

标签: java android firebase google-cloud-firestore


【解决方案1】:

你找到了解决方案,也许你很困惑,只需将这个 " 换成单引号 (') 它会很好地工作,感谢另一篇文章,它也对我有帮助。 我把我的代码留在这里:

FirestoreRecyclerOptions <Ingreso> newoptions = new FirestoreRecyclerOptions.Builder<Ingreso>()
                .setQuery(fStore.collection("DatosEmpresa").orderBy("DepartamentoEmpresaLoweCase").startAt(newText.toLowerCase()).limit(25).endAt(newText.toLowerCase()+'\uf8ff'),Ingreso.class)
                .build();

【讨论】:

    【解决方案2】:

    你有几个选择。

    查询过滤器

    您可以使用 .where 关键字添加查询过滤器。看看Order and Limit Data with Cloud Firestore

    查询游标

    如果您想使用游标对数据进行分页,请查看Paginate Data with Query Cursors

    您的查询

    您需要指定要搜索的字段。例如,如果您要查找包含 searchText 的 name 的所有文档,则需要添加 orderBy 参数。

    myRef.orderBy("name").startAt(searchText).endAt(searchText + "\uf8ff");
    

    这假定您的 myRef 是对集合的引用。

    【讨论】:

    • 感谢杰森的回答。您能否在 Firestore 中提供确切的等价物?谢谢!
    • 我已更新我的回复以添加您缺少的 orderBy 参数。
    • @Jason Berryman - 如何让 startAt 和 endAt 不区分大小写?
    • @umeshlohani - 这是不可能的,因为所有条目都区分大小写。对于全文搜索服务(例如 Algolia)来说,这可能是一个很好的用例。您可以创建一个单独的 search 集合,其中包含大写和小写条目,并带有指向原始文档的指针。将新文档添加到主集合时,触发 Cloud Function 将大小写版本添加到 search 集合
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多