【问题标题】:querying deeply nested children in firebase在firebase中查询深度嵌套的孩子
【发布时间】:2016-03-26 18:06:14
【问题描述】:

鉴于以下数据结构(从 firebase 导出):

{
"users" : {
  "123456789" : {
    "email" : "test@gmail.com",
    "name" : "test",
       "listings" : {
          "adtitle" : {
            "description" : "this is a description",
            "skilltype" : "painter"
          },
          "adtitle2" : {
            "description" : "this is a second description",
            "skilltype" : "painter"
          }
       }
    }
  }
}

我想运行以下查询:

var ref = new Firebase("https://my.firebaseio.com/users");
ref.orderByChild("listings/adtitle/skilltype").equalTo("painter").on("child_added", function(snapshot) {
    console.log(snapshot.key());
});

但在控制台上出现以下错误:

Error: Query.orderByChild failed: First argument was an invalid key: "listings/adtitle/skilltype".  Firebase keys must be non-empty strings and can't contain ".", "#", "$", "/", "[", or "]").

谁能看出我哪里出错了?我认为这是在 firebase 中查询嵌套数据的正确方法?

【问题讨论】:

    标签: javascript json firebase


    【解决方案1】:

    查询更深层次属性的能力是introduced in Firebase JavaScript SDK 2.3。如果您的目标是 Android 或 iOS,则该功能是在这些 SDK 的 2.4 版中引入的。

    确保您使用的是该版本(或更新的版本)。

    请注意,我不认为这是一个答案,但问题会反复出现(请参阅 this one from yesterday),如果没有答案,我无法标记重复项。

    【讨论】:

    • 非常感谢您的帮助,您能再回答一个小问题吗?如果我想从上述结构中检索 adtitle 作为字符串,我该怎么做?
    • 由于您查询的是硬编码路径“listings/adtitle/skilltype”,因此您也可以使用硬编码字符串“adtitle”
    • 每次将用户添加到数据库时,他们都会有不同数量的具有不同“广告标题”的广告。最终我想用技能类型画家找到数据库中的所有用户并显示所有“广告标题”
    • 这不适用于您当前的数据结构。您不能查询listings/$ad/skilltype。您需要创建一个广告列表,查询该列表,然后查找列表。或者甚至可能是按技能类型列出的广告列表并在那里查找。见firebase.com/blog/2013-04-12-denormalizing-is-normal.htmlfirebase.com/docs/web/guide/structuring-data.html
    • 非常感谢!你帮了大忙!
    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2011-02-24
    • 2023-03-25
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2014-06-10
    相关资源
    最近更新 更多