我可以强制 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")
例如,如果我有一个如下所示的 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")