对于android firebase如何通过字符串匹配孩子的值来编写用于查找子项的查询?

时间:2018-01-27 10:12:58

标签: android firebase firebase-realtime-database

This is my firebase model

假设这个脚本:

    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());
        }
    };

通过搜索孩子的价值(硬件)来查找用户电子邮件的查询是什么?

1 个答案:

答案 0 :(得分:0)

使用此数据库结构无法实现此目的。

首先,Users节点和service节点之间有另一个名为userId的节点,该节点不会出现在任何引用中。在service节点和子serviceName之间有另一个节点serviceId节点,它是push()方法生成的唯一密钥。我也不知道你在哪里循环来接收那些孩子。但这些不是实际问题。

在你的情况下,你需要使用Firebase中命名的tehnique,非规范化,为此,我建议你看一下这个教程Denormalization is normal with the Firebase Database,以便更好地理解。

因此,在您的情况下,您需要创建另一个仅托管服务的节点,因此您只需创建一个查询。很遗憾,Firebase不允许您在多个字段后进行查询,因此这是您唯一的选择。