ios – Firebase .indexOn动态键

我已经开始测试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数据库)中相当常见.

点赞