orderByChild()无法在Firebase数据库

时间:2017-07-05 16:42:49

标签: android firebase firebase-realtime-database

这是firebase数据结构。

Firebase datastructure

在这里,我想选择所有具有值的节点"停止"并删除它们。我写这段代码但这不起作用。

final Map<String, Object> map = new HashMap<String, Object>();
Query numberQuery = reference.child("numbers").orderByChild("stop");
numberQuery.addValueEventListener(new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot dataSnapshot) {
      if (dataSnapshot.exists()){
       for (DataSnapshot eachDataSnapShot : dataSnapshot.getChildren()) {
              map.put("/numbers/"+eachDataSnapShot.getKey(), null);
           }
       }
     }
   @Override
   public void onCancelled(DatabaseError databaseError) {

     }
    });

    reference.updateChildren(map);

实际上,我没有得到如何在firebase文档中使用查询。如果有任何其他方法(不使用查询)告诉我。

2 个答案:

答案 0 :(得分:1)

我找到了答案,有一个问题我正在使用orderByChild(),但我不得不在那里使用orderByValue()。所以我只是将orderByChild("stop")更改为orderByValue().equalTo("stop")并且它有效。

Query numberQuery = reference.child("numbers").orderByValue().equalTo("stop");

numberQuery.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()){
            for (DataSnapshot eachDataSnapShot : dataSnapshot.getChildren()) {
               map.put("/numbers/"+eachDataSnapShot.getKey(), null);
            }
            reference.updateChildren(map);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

答案 1 :(得分:0)

您可以使用orderByValue(),它会按照这种方式对其进行排序:

  1. 指定子键值为null的子项首先出现。
  2. 接下来是指定子键值为false的子节点。如果多个子项的值为false,则对它们进行排序 按字典顺序排列。
  3. 接下来是指定子键值为true的子项。如果多个子项的值为true,则对它们进行排序 按字典顺序排列。
  4. 接下来是具有数值的儿童,按升序排序。如果多个孩子具有相同的数值 指定的子节点,按键排序。
  5. 字符串在数字后面,按字典顺序按升序排序。如果多个孩子的价值相同 指定的子节点,按键按字典顺序排序。
  6. 对象排在最后,按字典顺序按键按升序排序。
  7. 检查this