Недавно я начал переключать свое приложение с Parse на Firebase. Все до сих пор здорово, но я не смог найти эквивалентный метод Firebase для Parse's whereContainedIn (String key, Collection values).База данных Firebase - запрос по списку идентификаторов
Это был очень полезный метод, который позволил мне передать массив идентификаторов, и он вернет все строки, соответствующие этому id. До сих пор с Firebase я возвращал все строки в базе данных, а затем перебирал их, чтобы проверить, содержится ли идентификатор этой строки в моем массиве идентификаторов. Другой способ - запрашивать каждый идентификатор отдельно, что не работает с асинхронным поведением 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. См. Http://stackoverflow.com/questions/35931526/speed-up-fetching-posts-for-my-social-network-app-by-using-query-instead-of-obse/35932786#35932786 –