Firebase .indexOn动态键

时间:2016-08-30 23:04:52

标签: ios swift firebase firebase-realtime-database

我已经开始测试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提供的“动态”子项?有办法做或者我必须改变树结构吗?

感谢。

1 个答案:

答案 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数据库)中相当常见。