我最近开始将我的应用从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 –