在 Firebase 中使用 equalTo("value","key") 吗?

Ant*_*ony 5 java firebase firebase-realtime-database

这是以下数据结构:

{
  "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"
    },
 ...
}
Run Code Online (Sandbox Code Playgroud)

我只需要获取 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) {

        }
});
Run Code Online (Sandbox Code Playgroud)

但不是这个,为什么?

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) {

        }
});
Run Code Online (Sandbox Code Playgroud)

我是否误解了 equalTo("value","key") 是在不重新排序 By something 的情况下使用?

Fra*_*len 6

equalToFirebase 文档说明了(可选)key参数:

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

由于您不是按优先级排序,因此您需要通过显式调用orderByChild().