【问题标题】:Android Firestore How to use document id as field in various queriesAndroid Firestore 如何在各种查询中使用文档 ID 作为字段
【发布时间】:2021-01-18 19:59:32
【问题描述】:

在这个页面上Query firestore database for document id

我发现这个 javascript 示例在 where 子句中使用 documentId

db.collection('books').where(firebase.firestore.FieldPath.documentId(), '==', 'fK3ddutEpD2qQqRMXNW5').get()

Android 相当于什么?我尝试使用

whereEqualTo(firebase.firestore.FieldPath.documentId(), 'fK3ddutEpD2qQqRMXNW5');

但是没用

编辑:我不想使用

db.collection('books').document("fK3ddutEpD2qQqRMXNW5").get()

因为我想学习如何使用 documentId 作为字段,以便我可以在其他查​​询中使用它,例如

.orderBy(firebase.firestore.FieldPath.documentId())

(来自 Get data ordered by document Id in Firestore by Javascript?)在 Android 中

简而言之,Android 中的firebase.firestore.FieldPath.documentId() 是什么?

【问题讨论】:

    标签: android firebase google-cloud-firestore


    【解决方案1】:

    您所展示的内容应该确实有效。从FieldPath.documentId() 的 API 文档中可以看到:

    返回一个特殊的标记FieldPath 来引用文档的ID。它可以在查询中使用,以按文档 ID 进行排序或过滤。

    所以您应该能够使用它来过滤文档 ID。我能够毫无问题地执行这样的查询。如果它对您不起作用,则说明其他问题 - 可能您要求的文档实际上并不存在,或者您提供了错误的集合和 ID。

    请注意,像这样按文档 ID 过滤不适用于集合组查询。为此,您确实需要将文档 ID 添加为要过滤的字段。

    【讨论】:

      【解决方案2】:

      如果你不想使用:

      db.collection('books').document("fK3ddutEpD2qQqRMXNW5").get()
      

      您可以选择将文档 ID 添加为文档的属性并使用以下查询:

      db.collection("books").whereEqualTo("documentId", "fK3ddutEpD2qQqRMXNW5").get()
      

      根据 Doug Stevenson 的评论,事实证明:

      db.collection("books").whereEqualTo(FieldPath.documentId(), "fK3ddutEpD2qQqRMXNW5").get()
      

      实际上有效,返回与以下情况相同的结果:

      db.collection('books').document("fK3ddutEpD2qQqRMXNW5").get()
      

      或者:

      db.collection("books").whereEqualTo("documentId", "fK3ddutEpD2qQqRMXNW5").get()
      

      现在,您只需附加一个侦听器即可。

      【讨论】:

      • 这不是真的。事实上,您可以在查询中使用FieldPath.documentId() 按文档 ID 进行过滤。您无法通过集合组查询来做到这一点。
      • @DougStevenson 是的,道格,你完全正确,我错过了。刚刚更新了我的答案。谢谢!
      • @DougStevenson 我刚刚用FieldPath.documentId() 测试了我的查询,它确实有效,感谢两位专家:)
      【解决方案3】:

      直接查询文档,而不是查询文档id的集合

      db.collection('books').document("fK3ddutEpD2qQqRMXNW5").get()
      

      有时我们会错过直截了当的那些!

      【讨论】:

      • 谢谢,但我需要另一种方法来做到这一点,请查看我的编辑!
      猜你喜欢
      • 2021-05-11
      • 2020-05-06
      • 1970-01-01
      • 2018-06-04
      • 2023-01-01
      • 1970-01-01
      • 2019-03-21
      相关资源
      最近更新 更多