【问题标题】:firebase query by array of child通过子数组进行firebase查询
【发布时间】:2017-06-13 10:28:21
【问题描述】:

我有这个文档结构

{
  "parking" : {
    "-Kace9LLJBuhG1RBWsy2" : {
      "address" : "avenida",
      "company_name" : "Company",
      "hours" : 40,
      "owner" : "Fmex7wiYAsbxNFhDy39X1r28J9L2",
      "receipts" : [
         {
          "id" : "-KbB-0Wxxx_vsCxy",
          "date" : "3/01/2017",
          "user_id" : "Fmex7wiYAsbxNFhDy39X1r28J9L2",
          "value" : 50
        },
        {
          "id" : "-KbB-0Wzzzz_vsCy",
          "date" : "3/30/2017",
          "user_id" : "Fmex7wiYAsbxNFhDy39X1r28J9L2",
          "value" : 50
        }
      ],
      "social_name" : "Company",
      "value" : "50"
    },

我可以使用收据的 ID 来取车吗? 示例:仅当用户 ID 在收据数组内时,我才想向用户显示停车位

或者您不想使用 firebase 执行此操作,而我必须创建引用而不是子文档?

编辑

我尝试过类似的方法:

var refParkingByUser = firebase.database().ref('parking').orderByChild('receipts').equalTo(Auth.$getAuth().uid);

但是如何访问收据元素?

【问题讨论】:

  • 不。该查询是不可能的:Firebase 数据库查询在您运行它们的位置下查询子项,但您在每个子项下查询的路径必须是固定/静态的。
  • 谢谢您的帮助,先生

标签: angularjs firebase ionic-framework firebase-realtime-database angularfire


【解决方案1】:

正如弗兰克所说,您不能对您的数据执行此操作。如果添加另一个如下所示的节点:

{
    "recieptParkingLots": {
        "-KbB-0Wxxx_vsCxy": {
            "-Kace9LLJBuhG1RBWsy2": true
        },
        "-KbB-0Wzzzz_vsCy": {
            "-Kace9LLJBuhG1RBWsy2": true
        }
    }
}

您还可以轻松找到附有收据的停车场。

如果每个停车场只能有一张收据,我会将它们存储在停车场节点之外:

{
    "parking" : {
        "-Kace9LLJBuhG1RBWsy2" : {
            "address" : "avenida",
            "company_name" : "Company",
            "hours" : 40,
            "owner" : "Fmex7wiYAsbxNFhDy39X1r28J9L2",
            "receipts" : {
                "-KbB-0Wxxx_vsCxy" : true,
                "-KbB-0Wzzzz_vsCy" : true
            }
            "social_name" : "Company",
            "value" : "50"
        },
    }
    "receipts" : {
        "-KbB-0Wxxx_vsCxy" : {
            "parking" : "-Kace9LLJBuhG1RBWsy2",
            "date" : "3/01/2017",
            "user_id" : "Fmex7wiYAsbxNFhDy39X1r28J9L2",
            "value" : 50
        },
        "-KbB-0Wzzzz_vsCy" : {
            "parking" : "-Kace9LLJBuhG1RBWsy2",
            "date" : "3/30/2017",
            "user_id" : "Fmex7wiYAsbxNFhDy39X1r28J9L2",
            "value" : 50
        }
    }
}

然后你就可以很方便的查到停车场然后去拿收据了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多