gpt4 book ai didi

android - Firebase 数据库 - 按 ID 列表查询

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:45 25 4
gpt4 key购买 nike

我最近开始将我的应用程序从 Parse 切换到 Firebase。到目前为止一切都很顺利,但我还没有找到与 Parse 的 whereContainedIn(String key, Collection values) 等效的 Firebase 方法。

这是一个非常有用的方法,它允许我传入一个 ID 数组,它会返回与该 ID 匹配的所有行。到目前为止,对于 Firebase,我让它返回数据库中的所有行,然后遍历它们以查看该行的 ID 是否包含在我的 ID 数组中。另一种方法是单独查询每个 id,这不适用于 Firebase 的异步行为。这是我现在为第一种方法所做的:

List<String> userIds = new ArrayList<>();
userIds.add("2");
userIds.add("32");
userIds.add("12545");
userIds.add("187");

DatabaseReference firebaseRef = FirebaseDatabase.getInstance().getReference();
Query queryRef = firebaseRef.child("videos");

queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

List<Video> usersVideos = new ArrayList<Video>();

for (DataSnapshot videoSnapshot : dataSnapshot.getChildren()) {
Video video = videoSnapshot.getValue(Video.class);

if (userIds.contains(video.userId)) {
usersVideos.add(video);
}
}

// usersVideos is now populated with the videos for the users

}

@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "CANCELLED");
}
});

这些方法似乎都不合理,因为我的表将包含数十万条记录。

如有任何帮助,我们将不胜感激!

最佳答案

创建另一个可以通过 userId 查找的引用,并让它返回该用户拥有的所有 videoIds。从那里您可以查询视频。这意味着每次保存时都需要保存在两个位置。有点痛苦,但这是 Firebase 推荐的。

所以你的引用看起来更像:

videos -
| - <videoId> -
| - <video stuffs>
| - userId
videosByUser -
| - <userId> -
| 0 - <videoIdA>
| 1 - <videoIdB>
| - <userId2> -
| 0 - <videoIdA>

关于android - Firebase 数据库 - 按 ID 列表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38834395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com