База данных Firebase - запрос по списку идентификаторов

Недавно я начал переключать свое приложение с Parse на Firebase. До сих пор все отлично, но мне не удалось найти эквивалентный метод Firebase для Parse whereContainedIn (String key, Collection values).

Это был очень полезный метод, который позволил мне передать массив идентификаторов, и он вернет все строки, соответствующие этому 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");
 }
});
</video></video></string>

Ни один из этих методов не кажется разумным, так как моя таблица будет содержать сотни тысяч записей.

Любая помощь будет принята с благодарностью!

1 ответ

Сделайте еще одну ссылку, которую можно просмотреть с помощью userId и вернуть ей все videoIds, которые есть у этого пользователя. Оттуда вы можете запросить видео. Это означает, что каждый раз, когда вы сохраняете, вам нужно сэкономить в двух местах. Вид боли, но это то, что рекомендует Firebase.

Итак, ваша ссылка будет больше похожа:

videos -
 | - <videoid> - 
 | - <video stuffs="">
 | - userId
videosByUser -
 | - <userid> -
 | 0 - <videoida>
 | 1 - <videoidb>
 | - <userid2> -
 | 0 - <videoida> 
</videoida></userid2></videoidb></videoida></userid></video></videoid>

licensed under cc by-sa 3.0 with attribution.