JSON数据显示了各种学院的可用学科,
{
"AvailableDisciplines": {
"4JN": {
"Disciplines": {
"CV": {
"disciplineCode": "CV",
"disciplineName": "Civil Engineering",
"siNo": "1"
},
"EC": {
"disciplineCode": "EC",
"disciplineName": "Electronics and Communication Engineering",
"siNo": "2"
},
"EE": {
"disciplineCode": "EE",
"disciplineName": "Electronics and Electricals Engineering",
"siNo": "3"
}
}
},
"4MT": {
"Disciplines": {
"EE": {
"disciplineCode": "EE",
"disciplineName": "Electronics and Electricals Engineering",
"siNo": "1"
},
"CS": {
"disciplineCode": "CS",
"disciplineName": "Computer Science Engineering",
"siNo": "2"
},
"IS": {
"disciplineCode": "IS",
"disciplineName": "Information Science Engineering",
"siNo": "3"
}
}
},
"1KT": {
"Disciplines": {
"TE": {
"disciplineCode": "TE",
"disciplineName": "Telecommunication Engineering",
"siNo": "1"
},
"CS": {
"disciplineCode": "CS",
"disciplineName": "Computer Science Engineering",
"siNo": "2"
},
"IS": {
"disciplineCode": "IS",
"disciplineName": "Information Science Engineering",
"siNo": "3"
}
}
}
}
}
其中4JN,4MT和1KT是学院代码。如果我想查询所有提供土木工程学科的学院,我将不得不在AvailableDisciplines节点上编写一个深入的查询。查询代码是:
FirebaseDatabase.getInstance().getReference()
.child("Trial").child("AvailableDisciplines")
.orderByChild("Disciplines/EE").startAt("")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.v("log", "datasnapshot: " + String.valueOf(dataSnapshot));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
}));我能够根据我的期望来获取数据。但是,我不知道如何为这种情况编写.indexOn规则。你能帮帮我吗?
发布于 2018-10-10 11:23:09
下面是一个示例规则代码:正如您在下面看到的,关键是多深并不重要。
{
"rules": {
".read": true,
".write": "auth != null",
"AvailableDisciplines": {
"$otherKeys":{
".indexOn":["disciplineName"]
}
}
}
}您可以在相同级别(即:".indexOn":["disciplineName", "disciplineCode","siNo"] )添加更多密钥
发布于 2018-10-10 13:42:51
在当前的数据模型中,查询应该检查实际值(而不是节点的存在)。例如:
FirebaseDatabase.getInstance().getReference()
.child("Trial").child("AvailableDisciplines")
.orderByChild("Disciplines/EE/disciplineCode").equalTo("EE")
...现在您有了一个实际属性,您可以在以下内容上定义索引:
{
"rules": {
"Trial": {
"AvailableDisciplines": {
"$collegecode": {
"Disciplines": {
"$discipline": {
".indexOn": "disciplineCode"
}
}
}
}
}
}
}https://stackoverflow.com/questions/52737410
复制相似问题