2017-05-26 9 views
1

私は、ユニークな電子メールを持っている売り手を登録するアンドロイドのアプリケーションをfirebaseに格納しています。重複を追加できないようにルールを作成しますが、動作しないようです。私は間違って何をしていますか?ルールエントリが重複していますfirebaseが動作しません

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

を追加する

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

私の方法あなたは、統計的に一意であることが保証され、新しい子を生成する、push()を呼んでいます。

あなたはユニークな電子メールアドレスを確認したい場合は、(エンコード)の電子メールアドレスが鍵であるところのコレクションを維持する必要があります。このような構成で

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

は、次のルールは確保していきますメールアドレスは一度しか書き込むことができます:

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

ユニークな値の話題が定期的に来るので、私はあなたにもこれらをチェックアウトをお勧めします:

+0

私はあなたを理解したよう、私は電子メールと呼ばれた子を作成する必要がありますか? – pete

+0

コレクションの名前は重要ではありませんが、それについて魔法はありません。重要なのは、このコレクションでは(エンコードされた)電子メールアドレスをキーとして使用することです。また、キーはコレクション内で一意であることが保証されているため、各電子メールアドレスが1回だけ存在することができます。 –

+0

私はすでにあなたに教えたいことを理解していますが、プッシュが手動で行うべきであるように私の鍵を自動的に生成するものであれば、 – pete

関連する問題