You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firebase实时数据库中添加多条件Where查询

实现双条件查询的解决方案

要获取同时满足deleteStatus=no且userID=指定用户ID的数据列表,Firebase Realtime Database需要通过复合查询来实现,以下是具体方案:

方案一:数据库端过滤(推荐)

这种方式直接在数据库层面完成双条件筛选,性能和流量更优,需要两步操作:

1. 添加复合索引

登录Firebase控制台,在数据库规则中添加针对复合字段的索引:

{
  "rules": {
    "medicines": {
      ".indexOn": ["userId", "userId_deleteStatus"]
    }
  }
}

2. 新增复合字段并修改查询代码

在每条medicines数据中新增userId_deleteStatus字段,值格式为[用户ID]_no(比如用户ID是u12345,则字段值为u12345_no)。之后修改查询代码:

FirebaseRecyclerOptions<ModelMed> options =
        new FirebaseRecyclerOptions.Builder<ModelMed>()
                .setQuery(FirebaseDatabase.getInstance().getReference()
                                .child("medicines")
                                .orderByChild("userId_deleteStatus")
                                .equalTo(mysharedPreferance.getUserID() + "_no"),
                        ModelMed.class)
                .build();

方案二:客户端过滤(临时替代)

如果暂时无法修改数据结构,也可以先按userId拉取数据,再在客户端筛选deleteStatus:

FirebaseRecyclerOptions<ModelMed> options =
        new FirebaseRecyclerOptions.Builder<ModelMed>()
                .setQuery(FirebaseDatabase.getInstance().getReference()
                                .child("medicines")
                                .orderByChild("userId")
                                .equalTo(mysharedPreferance.getUserID()),
                        ModelMed.class)
                .build();

在适配器的绑定方法中过滤数据:

@Override
protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull ModelMed model) {
    if ("no".equals(model.getDeleteStatus())) {
        // 渲染符合条件的条目
        holder.bindData(model);
    } else {
        // 隐藏不符合条件的条目
        holder.itemView.setVisibility(View.GONE);
        holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));
    }
}

注意:该方案会下载当前用户的所有medicines数据,数据量大时会消耗更多流量和性能,仅建议作为临时方案使用。

内容的提问来源于stack exchange,提问作者Tanveer Hasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:52:51