资源数据和请求资源数据是一回事吗? [英] Is resource.data and request.resource.data the same thing?
本文介绍了资源数据和请求资源数据是一回事吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我看了Firebase的官方指南,得到的印象是request.resource.data
指向正在编写的新数据。然而,当我在模拟器中测试时,无论我发送什么,request.resource.data
都存在,并且总是等于resource.data
。我看了文档,里面有点意思。
如果这些值应该相同,我如何解释指南中的此代码段
allow create: if
request.resource.data.score is number &&
request.resource.data.score >=1 &&
request.resource.data.score <=5 &&
据说这是为了防止用户发送无效的餐厅1-5星级评级。但是,根据我对仿真器的理解,这将验证已存在的数据,而不是传入的数据。
链接到视频中的时刻: https://youtu.be/eW5MdE3ZcAw?t=628
推荐答案
在创建/更新/删除操作中request.resource
指的是操作后(如果操作成功)将存在的文档,而resource
指的是操作前存在的文档。
因此(仅)如果您的写入操作不做任何更改,它们是否完全相同。
来自data validation的文档:
resource
变量指的是请求的文档,resource.data
是文档中存储的所有字段和值的映射。有关resource
变量的详细信息,请参阅reference documentation。 在写入数据时,您可能希望将传入数据与现有数据进行比较。在这种情况下,如果您的规则集允许挂起写入,request.resource
变量将包含文档的未来状态。对于只修改文档字段子集的更新操作,request.resource
变量将包含操作后的挂起文档状态。您可以检查request.resource
中的字段值以防止不需要的或不一致的数据更新:service cloud.firestore { match /databases/{database}/documents { // Make sure all cities have a positive population and // the name is not changed match /cities/{city} { allow update: if request.resource.data.population > 0 && request.resource.data.name == resource.data.name; } } }
这篇关于资源数据和请求资源数据是一回事吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文