2016-08-28 40 views
7

我可以在使用orderByChildequalTo(冷它適用於嵌套的孩子也一樣)火力地堡:查詢排除根據條件數據

private void getData() { 
     try { 
      final DatabaseReference database = FirebaseDatabase.getInstance().getReference(); 

      database.child(Constants.TABLE_TASKS).orderByChild("user/id") 
        .equalTo("somevalue") 
        .addValueEventListener(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 
          Timber.d(dataSnapshot.toString()); 
         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 
         } 
        }); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

以獲取在孩子特定值的數據有一種簡單的方法來獲得在沒有找到一個特定的值的數據,基本上像一個notEqualTo("somevalue")

+0

喜歡 –

+0

清理意見。恐怕我有更多壞消息...... –

回答

10

我想我已經找到了解決辦法,這更多的是如何在數據庫設計應該和實際現在我明白背後火力地堡方針的意圖

https://firebase.google.com/docs/database/android/structure-data

原始設計:

{ 
    child1: { 
     "user": { 
     "id": "id1", 
     "name": "puf" 
     } 
    }, 
    child2: { 
     "user": { 
     "id": "id2", 
     "name": "abe" 
     } 
    }, 
    child3: { 
     "user": { 
     "id": "id1" 
     "name": "puf" 
     } 
    } 
} 

更新後的設計:

所以除了存儲用戶的ID和姓名,我們也應存儲的節點,其中ID本身爲重點,並將其標爲true

{ 
    child1: { 
     "user": { 
     "id": "id1", 
     "name": "puf" 
     "id1": true 
     } 
    }, 
    child2: { 
     "user": { 
     "id": "id2", 
     "name": "abe" 
     "id2": true 
     } 
    }, 
    child3: { 
     "user": { 
     "id": "id1" 
     "name": "puf" 
     "id1": true 
     } 
    } 
} 

有了更新的設計,如果我執行ref.orderByChild('user/id1').equalTo(true)

我會得到輸出Child1和兒童3

,如果我執行ref.orderByChild('user/id1').equalTo(null)

我會得到CHILD2如刪除了參考輸出

+0

有趣的方法,存儲數據有點貴,但肯定有用 – davidtaubmann

+0

它節省了我的時間。 –

13

的火力地堡查詢模型,你不能不平等過濾的值

但你可以測試沒有任何價值(實質上:缺乏財產)。例如與這個數據模型:

{ 
    child1: { 
     "user": { 
     "id": 1, 
     "name": "puf" 
     } 
    }, 
    child2: { 
     "user": { 
     "id": 2, 
     "name": "abe" 
     } 
    }, 
    child3: { 
     "user": { 
     "id": 3 
     } 
    } 
} 

我可以查詢孩子沒有user/name屬性搭配:

ref.orderByChild('child/name').equalTo(null) 

導致獨生子女不具有名稱:

孩子3

隨意玩我的jsbin就看你還可以獲得:http://jsbin.com/liyibo/edit?js,console

更新:我知道我以前回答過這個,但不能早期發現。這裏的欺騙:is it possible query data that are not equal to the specified condition?。它看起來像我有沒有搞錯,因爲顯然我測試了沒有在上面的代碼的屬性。

+0

謝謝,弗蘭克!但通常情況下,用戶,我想過濾,如果一個孩子*是由某個用戶創建或沒有..在這種情況下,ID /名稱永遠不會爲空 –

+2

我知道。因此,第一行用粗體顯示:沒有辦法在具有與「標記值」不同的值的節點上過濾。對不起,我沒有更好的消息。 –

+1

謝謝,弗蘭克!感謝您的及時答覆。所以我想唯一的方法是獲取客戶端上的所有值並將其過濾(儘管有點貴)。我希望這樣的功能可以實現在更新的版本:) –