Firebase按嵌套节点中的值查询

时间:2018-08-27 20:28:32

标签: ios firebase firebase-realtime-database

这是我的文档:

enter image description here

比方说,我可以访问以下键和值:29 August 201814:00 - 15:00vyMDLD3V6paRWiA7Xlp12zanT7h1。如何结合查询中的内容,以便获得父键-LKVpa_1QviUn1RFlEPr

我尝试了多个版本:

  1. queryByValue,其中值等于id
  2. queryByKey,其中键等于29 August 2018
  3. queryByChild,其中子代等于29 August 2018

我得到零个结果或整个文档。

最终目标是删除这些节点,因此,如果您知道执行此操作的任何其他方法(除了在数据库中搜索父ID,然后删除),我将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以这样做:

ref.queryOrdered(byChild: "29 August 2018/14:00 - 15:00")
   .queryEqual(toValue: "vyMDLD3V6paRWiA7Xlp12zanT7h1")

ref指向bookedCourtsDaily。这将起作用,但是为了有效执行,需要在每个时隙上定义一个索引。因此,在您的规则中,您将需要以下内容:

{  
  "bookedCourtsDaily": {
    "$date": { 
      ".indexOn": ["13:00 - 14:00", "14:00 - 15:00", "15:00 - 16:00"] // etc
    }
  }
}

如果这不适用于您,我建议您在JSON中创建反向查找的更常见方法:

{
  "codeToAppointment": {
    "vyMDLD3V6paRWiA7Xlp12zanT7h1": "29 August 2018/14:00 - 15:00",
    "anotherCode": "28 August 2018/11:00 - 12:00"
  }
}

通过这种结构,您可以从“代码”(或JSON中值的其他含义)中查找约会的路径。

像这样的数据复制在NoSQL数据库(如Firebase)中非常普遍。