【问题标题】:Incrementing Number as Firestore Document Name?递增数字作为 Firestore 文档名称?
【发布时间】:2018-12-02 10:33:58
【问题描述】:

基本上总结在标题中,我想让它使在特定集合中创建的每个新文档都有一个递增的序列号。这是为了正确跟踪写入数据库的新订单。 AutoID 是随机的,会导致排序问题,我希望数据易于管理。这可以通过 Cloud Functions 实现吗?我可以查看任何示例代码 sn-ps 吗?谢谢!

【问题讨论】:

  • 您应该通过在包含您的实际排序顺序的文档中添加一个字段来解决排序要求。为此使用顺序 ID 是 Firebase 的反模式,因为它会导致可扩展性问题。
  • 您能否详细说明为什么顺序 ID 会导致可伸缩性问题?此外,任何允许通过 Cloud Functions 进行字段序列号的示例代码?
  • 可扩展性来自 Firestore 如何在其存储层上传播文档。简化:顺序 ID 具有更多的哈希冲突,这意味着您可以更快地达到写入限制。拥有更随机的 ID 可确保写入在存储层中均匀分布。在读取时没有这样的瓶颈,这就是为什么推荐的方法是使用随机键和一个用于在读取时排序的字段。
  • 您可以使用文档内的增量属性来解决您的问题。或者你可以在这里查看link.medium.com/JBLoRkvgz3

标签: java android firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

使用firebase.firestore.FieldValue.serverTimestamp。它将由服务器设置为nanosecond resolution

firebase.firestore().collection('stuff').add({
  sort: firebase.firestore.FieldValue.serverTimestamp(),
});

【讨论】:

    【解决方案2】:

    根据@Frank van Puffelen 的评论,“为此使用顺序 ID 是一种反模式”。 Firestore 文档here 中也提到了您的用例:

    重要提示:与 Firebase 实时数据库中的“推送 ID”不同,Cloud Firestore 自动生成的 ID 不提供任何自动排序。如果 您希望能够按创建日期订购您的文档,您 应该将时间戳作为字段存储在文档中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多