Firebase数据库按子值提供密钥

时间:2017-12-20 15:07:28

标签: android firebase firebase-realtime-database

我正在开发一个Android应用程序,在这个应用程序中,用户应该能够搜索知道某种语言的其他用户,具体取决于他们的偏好。要做到这一点,我得到了所需的语言并在数据库中进行查询,但我无法弄清楚如何在这里带来值。

所以下面你看到我的数据库结构在图片中。用户选择了一种名为“意大利语”的语言,这应该返回所有知道意大利语的用户。

FireBase Database STructure

以下是代码:例如,如果他们的语言是意大利语,它应该返回像Ridvan和Fenerbahce这样的用户。

 DatabaseReference myRootRef = FirebaseDatabase.getInstance().getReference("Users");



    myRootRef.child("Users").orderByChild("Languages").equalTo(Language).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {



        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


}

1 个答案:

答案 0 :(得分:0)

app.get('/msg/:id',(req, res) =>{ db.findById(req.params.id, function(err, dba) { if (err) res.send(err) res.json(dba) }); }); 让你感到困惑,因为没有价值equalTo。你想要

Italian

此处的空格只是一个ASCII值非常低的字符,因此我们可以得到所有结果。

请注意,此结构要求您为用户节点上的每种语言定义索引:

myRootRef.child("Users").orderByChild("Languages/Italian").startAt(" ")

这可能适用于语言。但是,如果值是用户生成的,则会导致索引的维护问题。在这种情况下,请考虑创建反向查找:具有顶级语言列表以及每个语言的关联用户。有关详情,请参阅我的答案:http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value