Firebase orderByChild - 奇怪的行为

时间:2017-07-30 14:53:23

标签: android firebase firebase-realtime-database

我正在尝试使用以下代码“过滤结果”结果:

方法1:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference(CollaboratorSkillDao.COLLABORATOR_SKILLS_PATH);
ref.orderByChild(CollaboratorSkill.JSON_COLLABORATOR_ID).equalTo(id);
ref.addValueEventListener(new OnDataChange() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Log.d(TAG, "onDataChange: " + dataSnapshot.getChildrenCount());
    }
});

方法2:

FirebaseDatabase.getInstance().getReference(CollaboratorSkillDao.COLLABORATOR_SKILLS_PATH)            
    .orderByChild(CollaboratorSkill.JSON_COLLABORATOR_ID).equalTo(id)
    .addValueEventListener(new OnDataChange() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d(TAG, "onDataChange: " + dataSnapshot.getChildrenCount());
        }
     });

据我所知,它们是等价的。
但是对于方法1,它返回58个结果,对于方法2,返回4个。

这意味着方法1没有过滤 为什么会这样?

1 个答案:

答案 0 :(得分:2)

当您调用其中一个查询方法(orderBy...equalTo等)时,它会创建一个新的查询对象。因此,您需要在变量中捕获它并使用它:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference(CollaboratorSkillDao.COLLABORATOR_SKILLS_PATH);
Query query = ref.orderByChild(CollaboratorSkill.JSON_COLLABORATOR_ID).equalTo(id);
query.addValueEventListener(new OnDataChange() {
    ...