我第一个想到的是比较公认的,尽管它需要一些好办法:)
首先要注意:如果你创建的数据只被用来作为关系(如userJokes
),最好是只加简单值,它不复制整个源数据(jokes
数据),就像这样:
userJokes: {
randomUserId: {
randomJokeId:true,
anotherRandomJokeId:true
}
awesomeUser: {
randomJokeId:true
}
}
秒注意:如果你想实现两个功能(喜欢和喜欢),我认为你应该把它作为不同的数据。所以它会是userJokeLike
和userJokeFavorite
(或类似的东西)。每个人的结构应与我在第一个注释中提到的相同。
总之:
每一个笑话数据仍然在他们的源路径(即内部jokes
),只有它们的ID被复制到新创建的数据路径(userJokeLike
和userJokeFavorite
)
如果您想搜索带有编号为randomUserId
的用户的笑话,请检查userJokeLike\randomUserId
。然后从每个笑话ID到达那里,从源jokes
的路径中获取真实数据。
当您想搜索由用户编号为randomUserId
的用户所喜欢的笑话时,基本上可以按上述方法进行操作。
当你要计算的喜好和每一个笑话的最爱,只是用这样的:
FirebaseDatabase.getInstance().getReference("userJokeLike")
.orderByChild().equalsTo("randomJokeId")
.addListenerForSingleValueEvent(new ValueEventListener() {
... onDataChange(DataSnapshot dataSnapshot) {
int jokeCount = dataSnapshot.getChildrenCount();
}
});
而且你去那里,希望这有助于。
注:我没有检查的最后一个代码,希望工作:对
编辑:
貌似我没有误会:d
上述解决方案是我认为最好的为了结构本身。但是如果我们需要简单而快速的事情,那么每种情况都会有所不同。我认为最好的解决办法,如果你想获得笑话的喜好和收藏包括(无需创建另一个请求),那么你的结构应该是这样的:
jokes: {
randomJokeId: {
// joke data here
likes:{
randomUserId:true,
anotherUserId:true
},
favorites:{
randomUserId:true
}
}
}
它包括likes
和favorite
当你请求jokes
数据。因此,在每个数据中,您只需检查当前用户的UID是否存在于likes
和/或favorite
内。而柜台会更容易这样。
快乐编码:)
我可能错过了我的问题中的一点。我想在任何社交应用程序的列表中显示笑话。在显示笑话的同时,我还想立即显示喜欢,不喜欢和喜欢的相应图标,具体取决于用户已经完成了什么。就像Instagram的Feed一样,在已经喜欢的图像上显示红色的心脏。所以,我希望这些数据已经存在,而无需进行新的查询。这就是为什么我提出了第一个解决方案,我将每个笑话都保存在用户UID密钥下,并附加了代表喜欢,不喜欢和喜好的信息。 – lagoman
我编辑了我的答案,希望这一次我明白了:D – koceeng