Firebase第二个节点深度查询,不知道更高节点密钥的值(swift)

时间:2017-12-21 19:17:13

标签: swift firebase firebase-realtime-database

我有以下Firebase结构

enter image description here

有一个节点可以按用户保留相册列表。在某些情况下我没有用户ID(E7Bv ..),我只有专辑ID(-L0uG ...)。如果我有两个,那么我可以轻松访问特定的专辑节点。

由于我没有userid,我需要一种方法来查询白蛋白等于我手头的值的节点。我不知道如何构建这样的查询。

作为一种方法,我还尝试将albumid(-L0uG ...)添加到子节点作为_key的值。我不想复制该值,只是查询albumid的子节点等于我对albid的值。

或者,如果无法完成,那么任何人都可以告诉我如何查询子节点的_key值与我手头的值匹配 - 不知道用户节点值?

我想做类似的事情......(其中albumRef是byUser_albums的顶级节点)

 albumRef.queryOrdered(byChild: "_key").queryEqual(toValue: albumID).observeSingleEvent(of: .value, with:  { snapshot in

当然这会失败,因为_key不在userid节点上,它位于albumid节点上。我需要通过子节点id进行查询,或者通过_key

进行更深入的查询

更新

来自Frank Frank。我试过这个......

  albumRef.queryOrdered(byChild: albumID).queryStarting(atValue: nil).observeSingleEvent(of: .value, with:  { snapshot in

这可以找到正确的数据。它返回作用域autoid的键。唯一的缺点是Firebase说(在调试日志中)....

"**Using an unspecified index. Your data will be downloaded and filtered on the client. Consider adding ".indexOn": "-L0vTQtLwBe_hilTOGid" at /byUser_albums to your security rules for better performance**" 

如果我正在进行典型的读取,那么我可以将规则添加到数据库中,但我无法添加此规则,因为它希望.indexOn的值不是静态值 - 它'是一个汽车。我没有看到在autoid上编制索引的方法。我想我将不得不重组相册节点以将用户作为属性,而不是由用户定义作用域节点。如果没有下载所有数据并在客户端上过滤,我看不到一种阅读方式。

0 个答案:

没有答案