Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何在像firestore这样的文档数据库中实施显式数据模式?_Typescript_Google Cloud Firestore_Datamodel - Fatal编程技术网

Typescript 如何在像firestore这样的文档数据库中实施显式数据模式?

Typescript 如何在像firestore这样的文档数据库中实施显式数据模式?,typescript,google-cloud-firestore,datamodel,Typescript,Google Cloud Firestore,Datamodel,任何客户端代码(在我们的例子中是Angular应用程序)都会在某个时刻对集合中的文档进行假设:它会假定在某些状态下存在某些属性等 换句话说,我们有一个隐式数据模式 用typescript显式表示模式并强制DB操作以符合模式的好方法是什么? 重要提示:我们实现了文档模式版本,作为任何文档的属性。因此,具有旧模式和新模式的文档并存。例如,版本为1的国家不需要“资本”字段,而版本为2的国家必须有“资本”字段 因此,架构模型必须支持这种情况,这是一项要求。有关可以存储哪些数据的规则可以在Firebase

任何客户端代码(在我们的例子中是Angular应用程序)都会在某个时刻对集合中的文档进行假设:它会假定在某些状态下存在某些属性等

换句话说,我们有一个隐式数据模式

用typescript显式表示模式并强制DB操作以符合模式的好方法是什么?

重要提示:我们实现了文档模式版本,作为任何文档的属性。因此,具有旧模式和新模式的文档并存。例如,版本为1的国家不需要“资本”字段,而版本为2的国家必须有“资本”字段


因此,架构模型必须支持这种情况,这是一项要求。

有关可以存储哪些数据的规则可以在Firebase的应用程序中强制实施。这些规则通常用于访问控制(谁可以访问数据?和数据验证(可以存储哪些数据?)

例如,此规则仅允许在文档具有
lastIndex
lastUpdated
字段时写入文档:

allow write: request.resource.data.keys().hasAll(['lastIndex', 'lastUpdated']) 
您还可以验证这些字段的类型,甚至它们的值。例如,以下规则确保
lastIndex
是一个数字,而
lastUpdated
必须始终设置为与服务器相同的时间:

allow write: request.resource.data.keys().hasAll(['lastIndex', 'lastUpdated']) &&
  request.resource.data.lastIndex is int  &&
  request.resource.data.lastUpdated == request.time

现在有一些关于这些安全规则的精彩视频在网上发布。这段视频看起来特别相关。

我正在构建一个GraphQL API,它使用Firebase Admin SDK访问Firestore。Firebase管理SDK将忽略FSR。如何确保数据完整性并跟踪“模式”更改?无法强制Admin SDK遵循安全规则,因此在从Admin SDK编写时,您也必须在代码中验证数据结构。