我试图将对Firestore的某些操作限制为创建或附加到数组。我该怎么办?如何区分arrayUnion()arrayDelete()?将数组操作与所有其他操作区分开来怎么办?

更新:到目前为止,从我从Firestore API中获得的信息来看,我猜测也许allow create, FieldValue.arrayUnion: if true之类的东西可以工作,但我尚未对其进行测试,它将在我对其进行测试时进行更新。

最佳答案

如果要确保对文档的任何更新都不会从数组中删除现有值,那么您正在寻找 hasAll :

allow update: if request.resource.data.arrayField.hasAll(resource.data.arrayField);

我刚刚在模拟器中对此进行了快速测试。更新具有arrayField: ["value1", "value2"]的文档,我:
  • 编写arrayField: ["value1"]
  • 时失败
  • 编写arrayField: ["value1", "value2"]
  • 成功
  • 编写arrayField: ["value1", "value2", "value3"]
  • 成功

    09-30 21:57