我正在尝试创建查询字符串,因此来自 Firebase 的响应仅返回具有相应userId
的行(不在顶级中)。
目标是仅获取当前登录用户的订单。
我的Javascript对象是这样的:
const order = {
itemId: "9T9WvJBbHiQpqyWdhBO0yX7lRny1"
price: 5.3,
customer: {
userId: "-L9EyOPFB2PnyAPFUH9M",
name: "demo user",
address: "some place in earth",
}
}
在Firebase中,我有这样的规则:
{
"rules": {
"orders": {
".read": "auth != null",
".write": "auth != null",
".indexOn": ["userId"]
}
}
}
然而,这显然没有成功,因为索引指向顶层。
以下是我为API调用创建的网址:
const queryParams = `?auth=${token}&orderBy="userId"&equalTo="${userId}"`;
axios
.get('/orders.json' + queryParams)
.then(res => {
// get orders for the currently logged-in user
})
.catch(err => {
console.error(err);
});
如果我将userId
向上移动一级,则完全正常,但客户和经过身份验证的用户使用相同的ID,所以我宁愿将它们保存在一个对象中。
是否可以在Firebase中使用嵌套索引查询数据?
如果是这样,我应该使用什么规则和查询字符串?
答案 0 :(得分:3)
您希望在orderBy="customer/userId"
上订购。
您还需要在该嵌套字段上定义索引,如下所示:
{
"rules": {
"orders": {
".read": "auth != null",
".write": "auth != null",
".indexOn": ["customer/userId"]
}
}
}
很快就确认最后一个针对Tom's answer here。