Google cloud firestore firestore规则和批写入同一数组

Google cloud firestore firestore规则和批写入同一数组,google-cloud-firestore,firebase-security,Google Cloud Firestore,Firebase Security,我正在尝试多次对同一数组进行批写入 writeBatch.updateData(ref, { 'testField':FieldValue.arrayUnion('firstReference') }); writeBatch.updateData(ref, { 'testField':FieldValue.arrayUnion('secondReference') }); writeBatch.updateData(ref, { 'testField':Fiel

我正在尝试多次对同一数组进行批写入

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会调用每一次写入。因为我想使用
exists
来检测每个引用是否正确。有人向我提出建议吗?

当您处理事务或批写入时,整个更改集在强制执行安全规则方面显示为单个更改,因为一个文档上的整批更改必须同时被允许或拒绝

如果您要求批量更新的大小是任意的,那么您尝试执行的操作是不可能的,因为安全规则没有任何迭代,也没有任何方法将某些函数应用于列表的每个项。如果可以假定列表的长度,则可以直接索引到每个项目中,以便对每个项目进行处理

您最后的办法可能是批量写入不同的文档,这样它们都会被匹配这些文档的规则单独检查,然后使用云函数将这些更改复制到发生更改后的位置。但在这种情况下,这些变化不会被原子化地应用

如果您希望看到安全规则在处理数据列表方面具有更大的灵活性,您应该这样做