首页 > 解决方案 > 在firebase的多个节点中搜索一个值

问题描述

这是我的火力基地的结构

在此处输入图像描述

我想让用户写一个纪念碑的名字并检查名字是否存在,在孩子“法国”和“英语”中,你能帮忙吗?

示例:我写“塔”,结果是“塔桥”和“埃菲尔铁塔”

locaisRef = ConfiguracaoFirebase.getFirebaseDatabase().child("English language");

      searchViewPesquisaInicial.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {

            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            

        return false;

        }

    });
    return view;

方法

    Query query = locaisRef.orderByChild("name")
                .startAt(text)
                .endAt(text + "\uf8ff");

        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                list.clear()

                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    list.add(ds.getValue(Locais.class));
                 
                }
               
                seachAdapter.notifyDataSetChanged(); 
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

标签: javascriptfirebasefirebase-realtime-database

解决方案


对于这种类型的操作,Cloud Firestore 允许比实时数据库更简单的查询,因为它允许收集组:

查询查询 = db.collectionGroup("landmarks").orderBy("name").startAt(text).endAt(text + "~");

注意:每个集合组都需要一个索引。如果您没有手动创建一个,那么在您第一次运行查询时,它会抛出一个包含链接的异常。该链接可用于创建索引。创建索引后,查询将正常工作


推荐阅读