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中创建复杂的查询

Java Firestore Android 在查询中使用数组列表来显示来自关注用户的帖子

Java Firestore Android 在查询中使用数组列表来显示来自关注用户的帖子