我已经开始测试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。这很好,但唯一的问题是:
使用未指定的索引。考虑添加“.indexOn”: “父母/ S6aO6Dx4lgg6anW9S9hu7EJrhVg1”/婴儿到您的保安 提高绩效的规则
如何索引用户ID提供的“动态”子项?有办法做或者我必须改变树结构吗?
感谢。
答案 0 :(得分:3)
对于这种类型的查询(通常在需要动态添加索引时),您可能需要设置反向索引。在你的情况下:
{
"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数据库)中相当常见。