在Firebase数据库Android中对键进行排序

时间:2018-03-31 12:27:02

标签: java android sorting firebase firebase-realtime-database

这是我当前的Firebase数据库:

是否可以根据用户的评分对用户进行排序(例如M57k..kNri..ulls..,而他们已经在数据库中了?或者它应该在进入数据库之前完成?

2 个答案:

答案 0 :(得分:2)

在Firebase数据库中对数据进行排序时,将rating存储为String并不是最佳选择。如果您将评级保持为字符串,请记住订购的项目为lexicographically。我们来举个例子。如果您使用了数字,这是正常的顺序:

  • 1308
  • 1309
  • 1310
  • 1311

但对于字符串,这是正常的顺序:

  • " 1308"
  • " 1309"
  • " 131"
  • " 1310"

Firebase中没有运营商,据我所知,大多数其他数据库也不允许您更改此行为。因此,我强烈建议您将数据类型更改为IntegerLong

如果您已经发布了应用程序,但我对此表示怀疑,因为我在您的数据库中看到了一些测试值,您需要知道即使您使用的是字符串,也可以这样做。您可以修改数据以获得所需的行为。因此,您可以按字典顺序存储按所需顺序存储的值。您可以通过用零填充它们来实现这一点:

  • " 0131" //在
  • 之前添加零
  • " 0132" //在
  • 之前添加零
  • ......
  • " 1308"
  • " 1309"
  • " 1310"
  • " 1311"

假设您更改了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。