我在android中有一个注册卖家的应用程序,卖家有一封独特的电子邮件,我将其存储在firebase中。创建一个规则,不允许添加重复项,但是它似乎不起作用。我究竟做错了什么?

{
 "rules": {
   ".read": true,
   ".write": true,
   "sellers": {
     "$seller": {
       "email": {
         ".write": "!data.exists()"
       }
     }
   }
 }
}


我的添加方法

 public void addSeller(Seller seller){
    HashMap<String,Seller> map= new HashMap<>() ;
    String email = seller.getEmail().replace(".",",");
    map.put(email,seler);
    database.child("sellers").setValue(map);
}

最佳答案

您正在调用push(),它将生成一个新的子级,据统计,该子级是唯一的。

如果要确保唯一的电子邮件地址,则必须保留一个集合,其中(已编码的)电子邮件地址为键:

emails
  pete@somedomain,com
  puf@somedomain,com


使用此结构,以下规则将确保电子邮件地址只能被写入一次:

{
 "rules": {
   ".read": true,
   "emails": {
     "$email": {
       ".write": "!data.exists()"
     }
   }
 }
}


唯一值的主题经常出现,因此我建议您也查看以下内容:


Firebase android : make username unique
How do you prevent duplicate user properties in Firebase?
Enforcing unique usernames with Firebase simplelogin
unique property in Firebase
Firebase Unique Value
What Firebase rule will prevent duplicates in a collection based on other fields?

08-18 20:37
查看更多