检查火力地堡验证规则,如果电影同名已经存在

问题描述 投票:0回答:2

我是新来的火力点。我正在做哪些搜索电影和实时数据库保存它们的应用程序。保存数据遵循以下结构:

var movieData = {
    title: "Frozen",
    genre: "Animation"
};

我保存电影是这样的:

database.ref().child("movies").push(movieData);

该工程确定。问题就出现了,如果我试图挽救它的两倍左右,在我的数据库我会在电影复制:

{
  "movies" : {
    "-LYSENT90rjBj_fIAHpY" : {
      "genre" : "Animation",
      "title" : "Frozen"
    },
    "-LYSEPufvX3p3w-yXf4d" : {
      "genre" : "Animation",
      "title" : "Frozen"
    }
  }
}

我试图创建一个检查,如果一些电影用相同的标题已经存在的验证规则。我最后一次尝试是这样的:

{
  "rules": {
    ".read": true,
    ".write": true,
    "movies": {
      "$pushid" : {
        ".validate": "root.child('movies/' + newData.child('title').val()).val() === null"
      }
    }
  }
}

我觉得很难理解它是如何检查的所有电影,如果每部电影的pushidis不同。此外,在模拟器上,我已经看到了,我只能测试readsetupdate方法。

是否有某种方式来实现这一目标?还是会更容易只需按下短片前,通过在客户端的查询手动检查?

javascript firebase-realtime-database firebase-security-rules
2个回答
0
投票

你不能在安全规则进行过滤的查询。你可以达到回数据库的唯一方法是,如果你知道你想读的节点的完整路径。所以,我不认为你将能够安全规则来做到这一点。考虑而不是使用云功能来被动地消灭无效的数据,或将其标记为无效,它被添加之后。或者,正如你所说,检查客户端上的第一次,有没有什么帮助。


0
投票

如何使用像Animation_Frozen作为pushid.You可以在客户端一起添加两个字符串。

database.ref().child("Animation"+"_"+"Frozen").set(movieData)
© www.soinside.com 2019 - 2024. All rights reserved.