我已经开始测试Firebase了,我无法弄清楚索引的一个问题.我正在根据我读过的内容创建一个结构 –
Firebase Data Structuring – 类似于用户和组的示例. JSON树看起来像这样:
{
"babies" : {
"-KQSVCXI-ZMz_lQ_Q906" : {
"name" : "Baby",
"parents" : {
"F0o8Gr5GC2SrakUYZpC20efcmk63" : true
}
},
"-KQSf4t9XQC3LnbsxLYS" : {
"name" : "Name2",
"parents" : {
"S6aO6Dx4lgg6anW9S9hu7EJrhVg1" : true
}
}
}
}
而我正试图让父母为婴儿 – 就像Firebase示例中的成员一样.我在iOS应用程序中使用以下方法执行此操作:
self.babiesReference
.queryOrderedByChild("parents/\(user.uid)")
.queryEqualToValue(true)
.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
// Print value
print(snapshot.value)
}
user.uid是当前用户的id.这工作正常,但唯一的问题仍然是:
Using an unspecified index. Consider adding “.indexOn”:
“parents/S6aO6Dx4lgg6anW9S9hu7EJrhVg1” at /babies to your security
rules for better performance
如何索引这个由用户id提供的“动态”孩子?有办法做或者我必须改变树形结构吗?
谢谢.
最佳答案 对于这种类型的查询(通常,当您需要动态添加索引时),您可能需要设置反向索引.在你的情况下:
{
"babies" : {
"-KQSVCXI-ZMz_lQ_Q906" : {
"name" : "Baby",
"parents" : {
"F0o8Gr5GC2SrakUYZpC20efcmk63" : true
}
},
"-KQSf4t9XQC3LnbsxLYS" : {
"name" : "Name2",
"parents" : {
"S6aO6Dx4lgg6anW9S9hu7EJrhVg1" : true
}
}
},
"parents": {
"F0o8Gr5GC2SrakUYZpC20efcmk63": {
"babies": {
"-KQSVCXI-ZMz_lQ_Q906": true
}
},
"S6aO6Dx4lgg6anW9S9hu7EJrhVg1": {
"babies": {
"-KQSf4t9XQC3LnbsxLYS": true
}
}
}
}
这种类型的双向链接在Firebase(以及许多类似的NoSQL数据库)中相当常见.