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

时间:2015-02-01 12:40:02

标签: firebase

所以我试图在这个结构中找到数据“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());
});

但我什么都没回来。哪里错了? 我该怎么用?

2 个答案:

答案 0 :(得分:19)

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

您的密钥为-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 propertykey或其priority。因此,如果您将数据结构更改为:

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

您可以通过以下名称获取儿童订单:

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

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

答案 1 :(得分:0)

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

wp plugin install jetpack