【发布时间】:2018-09-10 06:43:41
【问题描述】:
这是我当前的 Firebase 数据库:
是否可以根据用户的评分对已经在数据库中的用户(例如,M57k..、kNri..、ulls..)进行排序?还是应该在入库前完成?
【问题讨论】:
-
可以按一定的顺序检索用户,而不是直接在数据库中按顺序组织
标签: java android sorting firebase firebase-realtime-database
这是我当前的 Firebase 数据库:
是否可以根据用户的评分对已经在数据库中的用户(例如,M57k..、kNri..、ulls..)进行排序?还是应该在入库前完成?
【问题讨论】:
标签: java android sorting firebase firebase-realtime-database
在对 Firebase 数据库中的数据进行排序时,将 rating 存储为 String 并不是最佳选择。如果您将评级保留为字符串,请记住项目是按lexicographically 订购的。让我们举个例子。如果你用过数字,这是正常的顺序:
但是对于字符串,这是正常的顺序:
据我所知,Firebase 中没有运算符,在大多数其他数据库中也没有允许您更改此行为的运算符。因此,我强烈建议您将数据类型更改为Integer 或Long。
如果您已经发布了应用程序,但我对此表示怀疑,因为我在您的数据库中看到了一些测试值,您需要知道这是您可以执行的操作,即使您使用的是字符串。您可以修改数据以获得您想要的行为。因此,您可以按字典顺序存储所需的值。您可以通过用零填充它们来实现:
假设你已经改变了rating字段的类型,并且你想获取一个用户属性,按评分对项目进行排序,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference carpentersRef = rootRef.child("AvailableWorkers").child("Carpenters");
Query query = carpentersRef.orderByChild("rating")
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String g = ds.child("g").getValue(String.class);
Log.d("TAG", g);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
query.addListenerForSingleValueEvent(valueEventListener);
输出将是由rating 属性排序的g 属性的值。
【讨论】:
yourList 的列表中,并使用这行代码以相反的顺序进行排序。 Collections.reverse(yourList);.
lexicographically 的概念!谢谢你的回答[:
你可以这样做:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("AvailableWorkers").child("Carpenters");
Query query=ref.orderByChild("rating").startAt("1");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
String keys=datas.getKey();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
使用上面的查询将返回评分开始等于 1,orderByChild("rating").startAt("1");的结果
这个String keys=datas.getKey();会根据查询给你用户的ID。
【讨论】: