【发布时间】:2016-08-08 16:37:14
【问题描述】:
我最近开始将我的应用从 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");
}
});
这些方法似乎都不合理,因为我的表将包含数十万条记录。
任何帮助将不胜感激!
【问题讨论】:
-
Firebase 没有
WHERE id IN (1,2,3)等效项。对于不需要的合理大小的列表,因为 Firebase 管道请求。见stackoverflow.com/questions/35931526/…
标签: android firebase-realtime-database