firebase 使用 orderByKey() 和 equalTo() 检索数据

firebase retrieve data by using orderByKey() and equalTo()

所以我试图在这个结构中找到数据"aaaaabbbbbbaaaa":

disney
 studentList
 -Jh46tlaNFx_YmgA8iMJ: "aaaaabbbbbbaaaa"
 -Jh474kAvoekE4hC7W3b:"54ce1cbec4335cd3186105dc"

我用过这个

var ref = new Firebase("https://disney.firebaseio.com/");
ref.child("studentList").orderByKey().equalTo("54ca2c11d1afc1612871624a").on("child_added", function(snapshot) {
  console.log(snapshot.val());
});

但我一无所获。什么问题? 我应该使用什么?

在您提供的数据样本中,studenList 下没有节点的 key54ca2c11d1afc1612871624a

您的密钥是 -Jh46tlaNFx_YmgA8iMJ-Jh474kAvoekE4hC7W3b。您可以通过以下方式自行轻松确定:

ref.child("studentList").orderByKey().on("child_added", function(snapshot) {
  console.log(snapshot.key()); // on newer SDKs, this may be snapshot.key
});

您似乎想按节点的值对节点进行排序,但目前 Firebase 不支持该操作。 Firebase 只能 query children by a value of a named property, the key or its priority。因此,如果您将数据结构更改为:

disney
 studentList
   -Jh46tlaNFx_YmgA8iMJ:
     name: "aaaaabbbbbbaaaa"
   -Jh474kAvoekE4hC7W3b:
     name: "54ce1cbec4335cd3186105dc"

您可以按名称获取 children 订单:

ref.child("studentList")
   .orderByChild("name")
   .equalTo("54ca2c11d1afc1612871624a")
   .on("child_added", function(snapshot) {
      console.log(snapshot.val());
    });

只是一个侧节点:如果您的实际节点值与您提供的示例中的节点值相似,您可能需要考虑使用这些值作为键;在我未经训练的眼睛看来,它们已经很独特了。

我想它是在您提出问题后添加的,此处的解决方案https://firebase.google.com/docs/database/admin/retrieve-data?hl=en#ordering-by-value 可立即满足您的需求:

ref("studentList").orderByValue().on("value", function(snapshot) {
  snapshot.forEach(function(data) {
    console.log(data.val());
  });
});