【问题标题】:Firestore query: How to filter on document id?Firestore 查询:如何过滤文档 ID?
【发布时间】:2020-09-22 09:53:54
【问题描述】:

在 Firestore 中,我有一个包含由时间戳标识的文档的集合:/records/timestamp
我想使用 javascript 客户端 API 根据 id 过滤文档。
如何编写查询?
我正在寻找以下内容,但我找不到 id 的正确字段名称:

const query = firestore.collection(`/records`).where("id", "<", 1600766222);

【问题讨论】:

  • 我建议将时间戳保存为字段,因为您可以对其进行排序并将其存储为数字。但是,如果您确实需要将字符串 ID 用于其他目的,请使用 FieldPath.documentId()。
  • 感谢您的评论。提到订购,你不觉得可以query.orderBy(FieldPath.documentId())吗?
  • 是的,路易斯,但这将按照字符串的排序方式对其进行排序。我想你会想根据他们来的顺序而不是他们的字符串值(ASCII VALUES)的顺序来安排。并且将来当您有大量数据时,您可能希望添加一个使用时间戳作为数字的新功能,然后修复它会很头疼

标签: firebase


【解决方案1】:

这可以使用 FieldPath.documentId(),但有限制。

db.collection('CollectionName').where(firebase.firestore.FieldPath.documentId(), '<', '100').get()

但请注意,文档 ID 是字符串,因此这将包括 ID 为“0”或“1”的文档,但不包括“2”,因为“2”>“100”字典序。

所以如果你想要一个数字查询,你需要将文档 ID 作为数字字段写入文档中,然后对其进行正常查询。

参考:https://stackoverflow.com/a/48467056/1212903

【讨论】:

  • 完美!我将坚持使用文档 ID 而不是字段,因为我对字典排序很好,因为我专门处理时间戳。你会不这样做吗?
猜你喜欢
  • 1970-01-01
  • 2021-09-05
  • 2018-07-06
  • 2021-04-24
  • 1970-01-01
  • 2020-09-22
  • 2019-04-14
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多