假设这个脚本:
private static DatabaseReference;
mUserDatabase = FirebaseDatabase.getInstance().getReference("Users");
Query firebaseSearchQuery = mUserDatabase.child("service").orderByChild("serviceName").startAt(searchText).endAt(searchText+"\uf8ff");
FirebaseRecyclerAdapter<Workers, WorkerViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Workers, WorkerViewHolder>(
Workers.class,
R.layout.search_result_layout,
WorkerViewHolder.class,
firebaseSearchQuery
) {
@Override
protected void populateViewHolder(WorkerViewHolder viewHolder, Workers model, int position) {
viewHolder.setDetails(model.getName(), model.getEmail());
}
};
通过搜索孩子的价值(硬件)来查找用户电子邮件的查询是什么?
答案 0 :(得分:0)
使用此数据库结构无法实现此目的。
首先,Users
节点和service
节点之间有另一个名为userId
的节点,该节点不会出现在任何引用中。在service
节点和子serviceName
之间有另一个节点serviceId
节点,它是push()
方法生成的唯一密钥。我也不知道你在哪里循环来接收那些孩子。但这些不是实际问题。
在你的情况下,你需要使用Firebase中命名的tehnique,非规范化,为此,我建议你看一下这个教程Denormalization is normal with the Firebase Database,以便更好地理解。
因此,在您的情况下,您需要创建另一个仅托管服务的节点,因此您只需创建一个查询。很遗憾,Firebase不允许您在多个字段后进行查询,因此这是您唯一的选择。