【问题标题】:Will Firestore Auto Generated ID contain _ underscore?Firestore 自动生成的 ID 会包含 _ 下划线吗?
【发布时间】:2018-11-13 14:51:43
【问题描述】:

我有一个简单的逻辑,将 2 个 Firestore id 与 _ 组合在一起,即 id1_id2。在检索复合键时,我使用 _ 将其拆分。因此,Firestore的自动生成的ID是否可能包含_下划线,从而破坏了我用_下划线分割的简单逻辑?

我通过 AngularFire2 使用 Firestore 和 Angular。

一个简化的 sn-p。

constructor(private afs: AngularFirestore) { const id1 = this.afs.createId(); const id2 = this.afs.createId(); const compositeKey = id1 + '_' + id2; }

我需要compositeKey,因为我想通过Google Developer Expert 实现an example in here:示例relationships/{followerID_followedID}。还有其他可能的方法来实现相同的结果。但是,在遵循使用 CompositeKey 进行教学的教程时,我想了解使用 _ 下划线分割 2 个 id 是否没有冲突?

compositeKey 不用于 Firestore 中的直接查询。它用于 url 路由。我有一个路由呼叫localhost:4200/relationship/follwerId_followId

我会在 Angular 中读取 relationship/:id,然后用 _ 下划线分隔,最后查询 .collection('user_profile').doc(followerId).collection('user_profile').doc(followedId) 以在单个页面中显示两个用户的个人资料。

【问题讨论】:

  • 请编辑您的问题以包含一些代码,这些代码显示您如何生成 ID,以及您正在做什么需要像这样连接它们。可能有更好的方法来完成您的工作,而不依赖于 Firestore 的实施细节。
  • @DougStevenson 感谢您回复我的询问。刚刚添加了一个简化的 sn-p。
  • 是的,我知道您正在连接两个 ID。我的问题是为什么你觉得你需要这样做。您是否在查询中使用它们?这样做的目的是什么?
  • 不在 Firestore 查询中使用它们。使用它们来操作 url 路由。这意味着我有一个具有 url localhost:4200/relationship/followerId_followedId 的应用程序,它将显示关注者和关注的所有信息。
  • 不要对它们进行分隔。直接连接它们即可。

标签: firebase google-cloud-firestore


【解决方案1】:

您唯一能做到的就是为您的数据找到一种格式,让您可以 100% 确定该模式不会被 Firebase 随机复制。

Firestore 密钥使用修改后的 Base64 字母表,就像使用 Firebase 实时数据库一样:

-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz

它们是通过时间戳和随机值实现的。你可以找到算法here

Firebase 有一小部分不允许使用的字符,它们列在this answer

字符集限制

请注意,用于构建 Firebase 引用的网址可能包含任何 unicode 字符除外:

  • 。 (句号)
  • $(美元符号)
  • [(左方括号)
  • ](右方括号)
  • #(井号或井号)
  • /(正斜杠)

【讨论】:

  • 这是不正确的。 Firestore 随机密钥与实时数据库随机密钥不同。
  • 那我很糟糕。对不起@DougStevenson。您能否向我们提供 Firestore 密钥的生成方式?
  • 我相信您可以通过挖掘众多客户端库之一的源代码自己发现这一点。但值得注意的是,SDK 不会就这些 ID 中的预期内容向您提供任何保证或约定,除了它们是有效的文档 ID。依赖实现细节是一个非常糟糕的主意,尤其是对于仍处于测试阶段的产品。 github.com/firebase/firebase-js-sdk/tree/master/packages/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 2012-02-26
  • 2021-01-17
  • 2013-02-07
  • 1970-01-01
  • 2018-08-03
相关资源
最近更新 更多