这是我当前的Firebase数据库:
是否可以根据用户的评分对用户进行排序(例如M57k..
,kNri..
,ulls..
,而他们已经在数据库中了?或者它应该在进入数据库之前完成?
答案 0 :(得分:2)
在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);
输出将是g
属性排序的rating
属性的值。
答案 1 :(得分:1)
你可以这样做:
orderByChild("rating").startAt("1");
使用上面的查询,它将返回评级开始等于1 String keys=datas.getKey();
此function truthCheck(collection, pre) {
// Is everyone being true
for (var i = 0; i < collection.length; i++) {
//console.log(collection[i].user);
if (collection[i].hasOwnProperty(pre)) {
if (collection[i][pre] == true) continue;
}
return false;
}
return true;
}
var result = truthCheck([{
"user": "Tinky-Winky",
"sex": "male"
}, {
"user": "Dipsy",
"sex": "male"
}, {
"user": "Laa-Laa",
"sex": "female"
}, {
"user": "Po",
"sex": "female"
}], "sex");
console.log(result);
会根据查询为您提供用户的ID。