2017-05-26 106 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