我试图多次批量写入同一阵列。
writeBatch.updateData(ref, {
'testField':FieldValue.arrayUnion('firstReference')
});
writeBatch.updateData(ref, {
'testField':FieldValue.arrayUnion('secondReference')
});
writeBatch.updateData(ref, {
'testField':FieldValue.arrayUnion('thirdReference')
});
但是似乎request.resource.data.testField.size()
是3
而resource.data.testField.size()
是0
规则在该路径中仅调用一次,但我虽然firestore会调用每个write。因为我想使用exists
来检测每个参考文献是否正确。有人对我有建议吗?
答案 0 :(得分:1)
在处理事务或批量写入时,就强制执行安全规则而言,整个更改集都显示为单个更改,因为必须一次允许或拒绝所有单个文档上的整个更改。< / p>
如果您要求更新的批量是任意大小,则您尝试做的事情是不可能的,因为安全规则没有任何迭代,也没有任何方法可以对其中的每一项应用某些功能一个列表。如果可以假定列表的长度,则可以直接索引每个项目以对每个项目进行操作。
您的最后一招可能是将批处理写入不同的文档中,以便按照与那些文档匹配的规则对它们全部进行单独检查,然后使用Cloud Functions将这些更改复制到位。但是在这种情况下,这些更改不会自动应用。
如果您想在处理数据列表的安全规则中看到更大的灵活性,则应该file a feature request。