Android Firestore 如何在各种查询中使用文档 ID 作为字段
Posted
技术标签:
【中文标题】Android Firestore 如何在各种查询中使用文档 ID 作为字段【英文标题】:Android Firestore How to use document id as field in various queries 【发布时间】: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()
是什么?
【问题讨论】:
【参考方案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()
有时我们会错过直截了当的那些!
【讨论】:
谢谢,但我需要另一种方法来做到这一点,请查看我的编辑!以上是关于Android Firestore 如何在各种查询中使用文档 ID 作为字段的主要内容,如果未能解决你的问题,请参考以下文章
Android - 在返回语句之前未完成 Firestore 查询 [重复]
在 Android Studio Firestore 中获取查询时出现错误
Android Cloud Firestore:查询以查找用户名
在Android的Firebase Firestore中创建复杂的查询