Firebase控制台数据库规则:如何在“数据库规则”中索引以下数据库结构

时间:2017-07-10 10:26:19

标签: android firebase firebase-realtime-database firebase-security firebase-console

示例是在一个国家/地区列出的停车位。 使用userParkingDistanceMap构建数据库的原因是按当前用户与所有停车位之间的距离排序。

数据库查询为.orderByChild("userParkingDistanceMap/" + getUid())

那么,我如何在数据库规则中对此userParkingDistanceMap编制索引?

"parkingSpacesTokyo" : {
    "parkingId5" : {
      "parkingName" : "MY-PARKING-NAME",
      "parkingQuantity" : 70,
      "userParkingDistanceMap" : {
        "uid-uid-uid-uid-uid-uid-uid" : 7983,
        "9EAiImOh4ZUnqJ7em51u81FukD73" : 9456,
        "AG84p8KJgANuobRJ5pn1ipxULFB3" : 8336,
        "yYLVffMFsBQhsGHNWuPOksMDgip2" : 7983,
        "yp6mZm2SPVhz5pOq57tSEZ40piJ2" : 7983
      }
    },
   "parkingId6": {
        ...
    }
},
"parkingSpacesYOKOHAMA" : {

}

1 个答案:

答案 0 :(得分:0)

所以基本上你可能已经用

这样的东西初始化了引用
final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("parking");


ref.addListenerForSingleValueEvent(valueEventListner);

其中valueEventListner为:

ValueEventListner valueEventListner = new ValueEventListener() 
    {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) 
         {
         for(DataSnapshot childDataSnapshot: dataSnapshot)
             {
             DatabaseReference parkindId = ref.child(dataSnapshot.getKey);
             for(DataSnapshot parkingIdSnapshot : childDataSnapshot)
                {
                if(parkindIdSnapshot.hasChildren())
                   {
                   for(DataSnapshot distanceMap : parkingIdSnapshot)
                      {
                      String value = distanceMap.getValue(String.class);
                      }
                   }
                }
             }
         }
    @Override
    public void onCancelled(DatabaseError databaseError) 
         {}
    });

嗯,我刚刚直接回答了这段代码,所以它是一种psudo代码,所以基本上你可能已经了解了它。祝你好运。