当前位置: 首页 > 知识库问答 >
问题:

Firebase实时数据库:第4级嵌套的orderByUNICEF(). equalTo()

呼延承平
2023-03-14

我正在尝试运行Firebase实时数据库查询,以根据从根嵌套在第4级的值过滤数据。下面是数据结构,我的查询是:

let ordersSnapshot = await admin.database().ref(`orders`).orderByChild(`info/infoStatus`)
            .equalTo("In Process")
            .once('value');

但是这个查询没有返回任何数据。我已经启用了索引,但没有任何警告。我还将我的查询改为< code >。order by child(' info status '),但没有结果。

如果我将ref设置为低于一个级别,即admin.database(). ref('order/userId1'). orderByUNICEF('info/infostatus'). equalTo("In Process"),那么它会成功获得结果。但是在我的场景中,我没有可以在orderByUNICEF中使用的用户ID。

这是实时数据库查询的限制,即我需要更新我的数据结构还是我的查询中有任何错误?

订单节点:

{
    "userId1": {
        "orderId1": {
            "info": {
                "infoStatus": "In Process"
            }
        },
        "orderId2": {
            "info": {
                "infoStatus": "Complete"
            }
        }
    },
    "userId2": {
        "orderId1": {
            "info": {
                "infoStatus": "In Process"
            }
        }
    },
    "userId3": {
        "orderId1": {
            "info": {
                "infoStatus": "In Process"
            }
        }
    }


}

共有1个答案

柏修洁
2023-03-14

您订购/过滤的属性必须位于每个子级下的固定路径上。这意味着在您当前的数据结构中,您不能过滤所有用户的订单,只能过滤特定用户的订单。

典型的解决方案是平展数据,将订单存储在平面列表中,并在仍需要时向每个用户添加订单 ID 的查找列表。像这样:

users: {
    "userId1": {
        "orderId1": true,
        "orderId2": true
    },
    "userId2": {
        "orderId3": true
    }
    "userId3": {
        "orderId4": true
    }
}
orders: {
    "orderId1": {
        "info": {
            "infoStatus": "In Process"
        }
    },
    "orderId2": {
        "info": {
            "infoStatus": "Complete"
        }
    },
    "orderId3": {
        "info": {
            "infoStatus": "In Process"
        }
    },
    "orderId4": {
        "info": {
            "infoStatus": "In Process"
        }
    }
}

另请参见:Firebase查询双重嵌套

 类似资料:
  • 我在从Firebase实时数据库查询嵌套数据时遇到问题。 给出以下示例数据结构: 让我们假设这个集合将有数百个孩子。此外,在执行查询之前,ID是随机的和未知的。如图所示,每个交叉点都有几个其他值。 首先,我必须列出键以给定值开始的所有交叉。例如,如果我搜索1,我希望得到这个简单例子中的所有交叉。 此代码段解决了这个问题。虽然,我仍然不确定这是否是实现这一目标的最佳方式。 我的主要问题是,现在我必须

  • 我在firebase中具有以下结构。 为了检索数据,我使用以下代码- 调用onDataChange()时,p0包含除组数据之外的所有其他数据。 这是我的dataclass用户模型- 这是我收到的数据快照- datasnapshot!中没有组!。 更新添加了此行mFirebaseDatabaseReference?。保持同步(错误)。它昨天工作了几次,现在不工作了!

  • 我在一个Android应用程序中使用Firebase数据库,每次用户启动时,我都会在数据库中存储一些值,为此我会执行以下操作: 正如您在子方法中看到的,如果称为“usrId”,它将创建usrId目录,并在其中添加所有neccesary信息。但是我想为每个用户创建目录,所以我尝试传递usrId变量作为参数。但它不起作用。当我调试代码时,调试器说本地var usrId无法识别,我的问题是如何在Fire

  • 我正在做的项目在firebase实时数据库中有3个“表”,即: 用户(包括用户的登录信息,如电子邮件、密码、手机号码等) viscripprofiles(包含基本的配置文件信息,如配置文件pic字符串、姓名、职务和来自Users表的相应用户ID) 志愿者配置文件(包含地址、纬度、经度、可用性时间以及相应的用户ID和受害者配置文件ID(由Firebase生成)) 我的数据库截图在这里输入图像描述

  • 我正在将Firebase实时数据库迁移到Firestore,并且我有嵌套数据 我有嵌套数据,我想从中创建一个集合。 示例: 我想从FiRecovery中的嵌套数组创建一个子集合。因此我尝试了以下方法(Cloud Function): 但我得到了错误: 您有没有想过以最好的方式迁移嵌套的子数据? 雷诺更新

  • 我有一个数据库: 当用户()在应用程序中注册时,他会填充另一个用户uid(该用户uid具有属性)并将自己的uid添加到他的个人资料中(