2017-05-26 105 views
1

我有一个应用程序在Android注册卖家,其中有一个唯一的电子邮件,我将它们存储在firebase。创建一个规则,不允许添加重复项,但似乎不起作用。我究竟做错了什么?规则条目重复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); 
} 

回答

3

你打电话push(),产生在统计上保证是唯一的一个新的孩子。

如果你想确保不同的电子邮件地址,你将不得不保持一个集合,其中的(编码)的电子邮件地址是关键:

emails 
    [email protected],com 
    [email protected],com 

采用这种结构,下面的规则将努力确保电子邮件地址只能写一次:

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

唯一值的话题经常出现,所以我建议你也看看这些:

+0

据我了解你,然后我必须创建一个称为电子邮件的孩子呢? – pete

+0

收藏品的名称并不重要,没有什么不可思议的。重要的是,在这个集合中,您使用(编码)电子邮件地址作为关键字。而且由于密钥在集合中保证是唯一的,这确保每个电子邮件地址只能存在一次。 –

+0

我已经明白你想告诉我什么,但如果推是自动生成我的密钥,我应该这样做手动? – pete