当前位置: 首页 > 面试题库 >

在Firebase中使用equalTo(“ value”,“ key”)?

贺功
2023-03-14
问题内容

以下是以下数据结构

{
  "list" : {
    "-K4YlfoWHZqPyWONv68Y" : {
      ".priority" : -1.449077948445E12,
      "date" : 1449077948445,
      "id" : "0",
      "name" : "Name_0"
    },
    "-K4YlfoWHZqPyWONv68Z" : {
      ".priority" : -1.449077948445E12,
      "date" : 1449077948445,
      "id" : "1",
      "name" : "Name_1"
    },
    "-K4YlfoWHZqPyWONv68_" : {
      ".priority" : -1.449077948445E12,
      "date" : 1449077948445,
      "id" : "0",
      "name" : "Name_2"
    },
    "-K4YlfoWHZqPyWONv68a" : {
      ".priority" : -1.449077948445E12,
      "date" : 1449077948445,
      "id" : "1",
      "name" : "Name_3"
    },
 ...
}

我只需要获取id为“ 0”的项目;

以下工作:

final Firebase ref = new Firebase("https://millezim-test.firebaseio.com/").child("list");

ref.orderByChild("id").equalTo("1").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot d : dataSnapshot.getChildren()) {
            Model m = d.getValue(Model.class);
        }
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

        }
});

但是为什么不呢?

ref.equalTo("1","id").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot d : dataSnapshot.getChildren()) {
            Model m = d.getValue(Model.class);
        }
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

        }
});

我是否误解了使用equalTo(“ value”,“ key”)而不重新排序?


问题答案:

equalTo的Firebase文档对此(可选)key参数进行了说明:

具有先前指定优先级的子级中的子级键开始于。仅当按优先级排序时才允许使用此参数。

由于您没有按优先级排序,因此您需要通过显式调用来指定子项orderByChild()



 类似资料:
  • 问题内容: 在PHP中最好使用附加数组成员的方法, 要么 ? 尽管手册说您最好避免进行函数调用,但我阅读的速度也比慢得多。有哪些澄清或基准? 问题答案: 没有基准,但是我个人觉得看起来更干净,并且诚实地在毫秒内拆分头发是完全没有关系的,除非您计划将数十万个字符串添加到数组中。 编辑 :运行此代码: 第一种方法使用的速度比第二种方法快50%。 一些基准测试结果: 这并不奇怪,因为PHP手册指出了这一

  • 我已经尝试了其他帖子的建议,但没有成功。我只是遇到了一个问题,我得到了以下代码,当用户单击特定日期时显示来自Firebase数据库的数据。如果我注释掉(start At(), endAt()),回收器将填充所有数据,当我添加equalTo()或start At(). endAt()时,回收器不会填充。之前的代码正常工作,只是最近停止工作,我不知道为什么。代码如下所示:贝娄是适配器: 这是查询: 我

  • 我使用MongoConfiguration类来设置我的Sping 4 MongoDB。我想从应用程序中读取属性。属性,所以我使用@Value: 这对于web应用程序来说很好——但当我在命令行Java应用程序中尝试同样的想法时,它失败了(就好像找到了application.properties,但@Value从未运行过一样)。我知道我正在阅读申请书。属性文件确定。这一定与在servlet容器中运行与

  • 问题内容: 下面的查询试图选择给定节点的子节点。如何使用变量而不是对子节点进行硬编码,以便可以将它们作为参数传递给SProc? 问题答案:

  • 我正在尝试运行Firebase实时数据库查询,以根据从根嵌套在第4级的值过滤数据。下面是数据结构,我的查询是: 但是这个查询没有返回任何数据。我已经启用了索引,但没有任何警告。我还将我的查询改为< code >。order by child(' info status '),但没有结果。 如果我将ref设置为低于一个级别,即,那么它会成功获得结果。但是在我的场景中,我没有可以在中使用的用户ID。

  • 我正在可视化工作室上执行 Xamarin 窗体多平台应用。我使用Firebase实时数据库,并创建了一个这样的嵌套表 我需要创建一个listview,在那里我可以看到用户阅读的每本书按流派过滤。 问题是,我必须更新实时数据库的规则,并添加索引才能使用EqualTo。但是ID总是变化的,因为它是用户的UID。 我试着 但应用程序崩溃,并要求我使用整个根。有什么建议吗?