我是新来的火力点。我正在做哪些搜索电影和实时数据库保存它们的应用程序。保存数据遵循以下结构:
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"
}
}
}
}
我觉得很难理解它是如何检查的所有电影,如果每部电影的pushid
is不同。此外,在模拟器上,我已经看到了,我只能测试read
,set
和update
方法。
是否有某种方式来实现这一目标?还是会更容易只需按下短片前,通过在客户端的查询手动检查?
你不能在安全规则进行过滤的查询。你可以达到回数据库的唯一方法是,如果你知道你想读的节点的完整路径。所以,我不认为你将能够安全规则来做到这一点。考虑而不是使用云功能来被动地消灭无效的数据,或将其标记为无效,它被添加之后。或者,正如你所说,检查客户端上的第一次,有没有什么帮助。
如何使用像Animation_Frozen作为pushid.You可以在客户端一起添加两个字符串。
database.ref().child("Animation"+"_"+"Frozen").set(movieData)