如何让一个主要的孩子“订阅者”,然后在其中包含一个拥有用户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());
// ...
}
});