我最近開始將我的應用從Parse切換到Firebase。到目前爲止,一切都很順利,但我一直無法找到Parse的whereContainedIn(String key,Collection values)的Firebase等效方法。Firebase數據庫 - 按ID列表查詢
這是一個非常有用的方法,它允許我傳入一個ID數組,它將返回與該ID相匹配的所有行。到目前爲止,我已經使用Firebase返回數據庫中的所有行,然後遍歷它們以查看該行的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");
}
});
這些方法都不合理,因爲我的表格將包含數十萬條記錄。
任何幫助將不勝感激!
火力地堡不具備'WHERE ID IN(1,2,3)'等價的。對於不需要的合理大小的列表,因爲Firebase管道請求。請參閱http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse/35932786#35932786 –