在firebase中进行IN查询的最佳方法是什么?

时间:2017-10-10 09:26:47

标签: firebase firebase-realtime-database

由于firebase数据库不支持从equalTo中的数组查询,如何在firebase中执行以下查询?

{
  'keyname': 'value1'
},
{
 'keyname': 'value2'
},
{
 'keyname': 'value3'
}

如何检索包含value1和value2的所有对象?我是否使用forEach循环或是否有另一种方法来获取值。

1 个答案:

答案 0 :(得分:0)

我相信您正在寻找包含value1 value2的所有节点的查询。你的平台没有显示出来,所以我会在很高的层面上解决它。

解决方案1查询value1的所有节点,然后再次查询value2

的所有节点

解决方案2查询节点startingAt(" value1")。endingAt(" value2")

解决方案3添加结构以保持对符合这两个条件的节点的引用

items
  node_0
    keyname: value1
  node_8
    keyname: value2

value1_value2
   node_0: true
   node_8: true

解决方案4确定值之间的共性。例如。说value1是Apple,value2是Pear。两者都是Fruit,你知道你的用户会想要所有水果,所以查询typeOf是Fruit。您可以通过添加grownOn:Tree进一步扩展它。然后,您可以查询在树上生长的所有项目。您甚至可以添加复合谓词type_grown:Fruit_Tree,然后您可以查询在树上生长的所有水果,而不是在树上生长的所有坚果。

{
  keyname: "Apple"
  typeOf: "Fruit"
}
  keyname: "Pear"
  typeOf: "Fruit"
}

解决方案5 加载整个节点并在代码中过滤(根据数据集的大小,这是一种很好的方法)。

解决方案6 查询以 value 开头的所有节点,并拒绝所有不是value1或值2的节点。在Swift中它将是

let nameQuery = usersRef.queryOrdered(byChild: "keyname")
                        .queryStarting(atValue: "value")
                        .queryEnding(  atValue: "value\u{f8ff}")

请参阅我对this question的回答,了解有关该问题的更多信息。