我可以强制 Firestore 文档具有特定类型或数据模型(即静态类型)吗?

Can I force a Firestore document to have a specific Type or data model (i.e. static typing)?

例如,如果我有一个如下所示的 Firestore 文档:

{
  threadId: 'abc',
  authorId: 'abc',
  content: 'blah blah blahh'
}

如果我不小心写了一些添加另一个字段的代码,我可以让 Firebase 抛出错误吗,如下所示:

{
  accident: 'OOPS! THIS FIELD SHOULD NOT BE HERE',
  threadId: 'abc',
  authorId: 'abc',
  content: 'blah blah blahh'
}

就像每个文档的形状的静态类型,并从 Firestore 端强制执行。这可能吗?

一个可能的解决方案是创建一个 Cloud Functions,它会在文档更新后读取它的内容。因此,例如,如果您的文档具有固定数量的字段,那么您应该始终检查该数字,在您的示例中,它将是三个。例如,如果检查的结果是四,那么你可以采取一些行动。

另一种方法是在更新文档之前检查文档中是否存在某个字段。如果该特定字段存在,则进行更新,否则抛出错误。

如果您从 client-side SDK 写入数据,您可以使用安全规则来验证数据。有关这方面的一些示例,请参阅 validating data in security rules.

上的 Firestore 文档

例如,要测试文档是否只有您提到的三个字段,您可以这样做:

allow write: if request.resource.data.keys.hasOnly("threadId", "authorId", "content")