有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于规则的java删除firestore文档

我创建了一个应用程序,人们可以上传一些自己的图片

现在,为了处理人们上传不合适图片的情况,我创建了一个报告系统。我所做的基本上是每次有人报告图像时,报告人的ID都会添加到firestore中的数组中,如下所示:

db
    .collection( "Reports" )
    .document( ImageID )
    .update( "Reports", FieldValue.arrayUnion( UID ) );

现在,我想设置一个规则,例如,如果数组的大小为5(5个不同的人报告图像),它将自动从云中删除该图像

有什么方法可以代替每次读取数组并检查ist大小

多谢各位


共 (2) 个答案

  1. # 1 楼答案

    您可以在Reports集合上创建触发器

    export const updateReportTrigger = functions.firestore
      .document('Reports/{ImageID}')
      .onUpdate(onUpdate)
    
    async function onUpdate({ before, after }, context) {
      const newData = after.data()
      if (newData && newData.Reports && newData.Reports.length > 5) {
        // put your delete logic here
        // you can access the document id through context.params.ImageID
      }
    }
    
  2. # 2 楼答案

    最常见的方法是通过云函数实现,云函数是服务器端代码,在(对于本用例)将某些内容写入Firestore时会自动触发。请参阅Cloud Functions上的文档和Firestore triggers上的页面


    另一种方法(但涉及更多)是通过查询和安全规则来保护访问。在这种情况下,您将:

    1. reportCount添加到文档中,并确保其与报告同步更新
    2. 从应用程序代码中,使用查询仅请求reportCount小于5的图像
    3. Use security rules to only allow queries with that clause in it

    如上所述,这更多地涉及到您编写的代码量,但优点是不涉及服务器端代码,而且当有太多的报告进入文档时,文档会立即被阻止