【问题标题】:Checking if any documents in Firestore contain a substring [duplicate]检查 Firestore 中的任何文档是否包含子字符串 [重复]
【发布时间】:2020-04-07 14:22:48
【问题描述】:

我在 Firestore 中有大量带有随机 ID 的文档,每个文档都有两个字段,一个名称和一个描述。我希望我的应用程序允许用户输入一系列字符,然后向他展示包含该字符序列的所有文档,比如名称字段。使用 Firebase 及其查询是否可行,如果可以,您能给我一个 Kotlin 或 Java 的代码示例吗?我知道有一些方法,例如hasChild()child("child name").exists(),但由于我还不知道用户正在寻找哪个文档,如果我没记错的话,我无法使用它们。

例如,如果我有 3 个具有以下名称(“mike”、“michael”、“dave”)的文档的集合,并且用户输入了“mi”,我希望能够检索名称为“mike”和“michael”的文档。

【问题讨论】:

  • 您使用的是实时数据库还是 Firestore?
  • 我正在使用 Firestore,我要把它添加到我的帖子中
  • @SteliosPapamichail 可以在 Firestore 中进行一些“破解”而不是帮助您 search the database easier

标签: android firebase google-cloud-firestore


【解决方案1】:

如果您想获取所有name 字段以mi 开头的文档,您可以这样做:

db.collection("users")
  .whereGreaterThanOrEqualTo("name", "mi")
  .whereLessThanOrEqualTo("name", "mi\uF7FF")
  .get()
  .addOnSuccessListener { documents ->
    for (document in documents) {
      Log.d(TAG, "${document.id} => ${document.data}")
    }
  }
    .addOnFailureListener { exception ->
        Log.w(TAG, "Error getting documents: ", exception)
    }

这里使用的 \uF7FF 值是存在的最后一个 Unicode 字符,因此:

  1. name 值对所有文档进行排序
  2. 查找第一个以mi 开头的文档
  3. 返回所有文档,直到到达大于mi的文档

如需了解更多信息,请阅读 querying data 上的 Firebase 文档。

我还建议查看以下相关问题:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 2015-03-25
  • 2021-09-10
  • 1970-01-01
  • 2012-04-21
相关资源
最近更新 更多