【发布时间】:2015-04-19 03:44:04
【问题描述】:
我正在开发一个使用 ionic 框架和 FIREBASE 作为后端的购物车移动应用程序。我有一个要求,我需要通过多个数据属性加入 JOIN、SORT、FILTER 和 PAGINATE。
示例数据结构如下。
产品:{
prod1:{
name: Samsung-s4,
type: pro,
category: Phone,
created_datetime: 1426472828282,
user: user1,
price: 400
},
prod2:{
name: iPhone 5s,
type: pro,
category: Phone,
created_datetime: 1426472635846,
user: user2,
price: 500
},
prod3:{
name: HP Laptop i3,
type: regular,
category: Computer,
created_datetime: 1426472111111,
user: user1,
price: 600
}
}
用户配置文件:{
user1:{
name: abc_user,
display_name: ABC,
email: abc@mail.com
},
user2:{
name: xyz_user,
display_name: XYZ,
email: xyz@mail.com
}
}
我需要使用多种方式查询产品。下面给出两个简单的例子。
1) 使用 Pagination 获取所有产品,其中 type 为“pro”,然后加入 user_profiles 并按创建日期排序。
2) 使用 Pagination 获取所有产品,按类别过滤,然后加入 user_profiles 并按创建日期排序。
和上面一样,会有越来越多的过滤选项出现,例如:价格。
我的主要问题是,我找不到使用 FIREBASE 查询选项的直接方法。我还参考了 firebase util 文档,但我也没有看到完成这项工作的方法。
据我所知,完成此任务的唯一方法是,通过将所有数据(或大部分数据)输入客户端并在客户端执行 SORT / FILTER / PAGINATE 在客户端进行大部分处理结束。
但我们预计这些模式中有数千条记录,因此如果我们在客户端进行处理,将会对性能产生巨大影响!!
感谢您解决此问题的专业知识/支持。
提前谢谢你。
更新:
我更改了数据结构(如 webduvet 解释的那样)并尝试使用 firebase-util 但未能实现我想要的。标准:产品 -> 按类型/专业过滤 -> 按 products.created_date 排序
类型:{
专业人士:{
product1: user1,
product3: user1,
...
}, 常规的:{ ... }
}
firebase-util - angularfire 代码
var list = $firebase(new Firebase.util.NormalizedCollection(
ref.child("products").orderByChild('created_datetime'),
ref.child('type').child('pro')
).select(
{key: "products.name" , alias: 'name'}
).ref()).$asArray();
“products”将有十万条记录,因此我们必须确保我们尽可能在 firebase 端进行限制,而不是在客户端处理。
请帮忙!
【问题讨论】:
标签: firebase angularfire