我的firebase数据库如下所示:
{
"users": {
"-KL2IIz4jasq1kjdM-LA": {
"id": "12345",
"name": "peter",
"email": "peter@gmail.com"
}
"-KL2Idasdsf34kjdM-LA": {
"id": "45356",
"name": "joe",
"email": "joe@gmail.com"
}
}
}
现在我需要通过他的身份“45356”得到乔。我该如何存档?
我现在只能通过他的$ userId“-KL2Idasdsf34kjdM-LA”来获取他
答案 0 :(得分:3)
虽然@adolfosrs的答案有效,但我建议您更改数据结构。如果您的用户拥有自然ID,则应将其存储在该ID下。
{
"users": {
"12345": {
"name": "peter",
"email": "peter@gmail.com"
}
"45356": {
"name": "joe",
"email": "joe@gmail.com"
}
}
}
这允许使用(固定性能)直接查找加载它们:
mDatabase.child("users").child("45356").addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//data will be available on dataSnapshot.getValue();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "error:", databaseError.toException());
}
});
无论您拥有多少用户,这都将具有固定的性能。随着用户数量的增加,查询会变慢,因此会影响可扩展性。
答案 1 :(得分:2)
mDatabase.child("users").orderByChild("id").equalTo("45356").addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
//data will be available on userSnapshot.getValue();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "error:", databaseError.toException());
}
});