如何在Firebase数据库中实现此结构?

时间:2016-09-14 11:00:29

标签: firebase firebase-realtime-database nosql

如何让一个主要的孩子“订阅者”,然后在其中包含一个拥有用户uid的孩子,然后是所有已订阅该用户的用户。 这样我就可以存储用户的所有订阅者,如果需要,我可以轻松地检索它们。

{
  "subscribers": {
    "uid1": {
      "uid4": true,
      "uid7": true,
      "uid3": true
    },
    "uid15": { 
      "uid3": true,
      "uid9": true,
      "uid17": true
    },
    ...
  }
}

我不想使用push(),因为它会生成自己的密钥,如果我在uid1上使用setValue(),那么它会删除它的所有子项,只删除新的子项,这也不好。所以我希望能够为某个uid添加和删除订阅者。

SOLUTION:

就我而言,我的目标是Android平台,所以Java。该解决方案基于Dravidian使用 updateChildren()的评论。谢谢Dravidian。

// ADD SUBSCRIBER
        String key = uid; // the uid of the user we want to subscribe to
        HashMap<String, Object> subscriber = new HashMap<>();
        subscriber.put(subscriberUid, true);
    mDatabase.child("subscriptions").child(key).
            updateChildren(subscriber, new DatabaseReference.CompletionListener() {
                @Override
                public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {

                    Log.d(TAG, "Subscribed");
                }
            });

// REMOVE SUBSCRIBER
    mDatabase.child("subscriptions").child(key).child(subscriberUid).removeValue();


// RETRIEVE SUBSCRIBER
    mDatabase.child("subscriptions").child(key).
            orderByChild(subscriberUid).limitToFirst(1).addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    Log.i(TAG, "Datasnapshot exists: " + dataSnapshot.exists());

                    if (dataSnapshot.exists()) {

                        Log.i(TAG, "User is subscribed");

                    } else {
                        Log.i(TAG, "User is not subscribed");

                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.w(TAG, "getUser:onCancelled", databaseError.toException());
                    // ...
                }
            });

0 个答案:

没有答案