我正在开发一个使用离子框架和防火墙作为后端的购物车移动应用程序。我需要通过多个数据属性加入连接、排序、筛选和分页。
样本数据结构如下所示。
产品:{
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
}}
user_profiles:{
user1:{
name: abc_user,
display_name: ABC,
email: abc@mail.com
},
user2:{
name: xyz_user,
display_name: XYZ,
email: xyz@mail.com
}}
我需要使用多种方式查询产品。下面给出两个简单的例子。
1)获取所有分页产品,其中类型为"pro“,然后加入user_profiles并按创建日期进行排序。
2)获取所有分页产品,按类别过滤,然后加入user_profiles,按创建日期排序。
像上面一样,会有越来越多的过滤选项出现在例如:价格。
我的主要问题是,我无法使用FIREBASE查询选项直接找到这样做的方法。此外,我还提到了firebase使用文档,但在那里,我没有找到一种方法来完成这一任务。
据我所见,实现这一点的唯一方法是,通过将所有数据(或大部分数据)输入客户端,并在客户端执行排序/筛选/分页来完成客户端的大部分处理。
但是我们期望这些模式中有数千条记录,因此,如果我们在客户端进行处理,将会对性能产生巨大的影响!!
感谢你的专业知识/支持来解决这个问题。
提前谢谢你。
更新:
我改变了数据结构(正如webduvet解释的那样),并尝试了使用firebase-util,但是没有实现我想要的。标准:产品->过滤器按类型/pro ->按products.created_date排序
类型:{
专业:{
product1: user1,
product3: user1,..。
},规则:{.}
}
消防基地
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();“产品”将有10万条记录,因此我们必须确保尽可能多地限制在防火墙端,而不是在客户端处理。
请帮帮忙!
发布于 2015-04-19 11:45:35
这不是通过查询,而是通过数据库设计完成的。您需要以非规范化的方式存储数据,例如:
type: {
pro:{
product1: user1,
product3: user1,
...
},
regular:{
...
}
}上面的结构将为您提供查询所有pro产品和检索用户id的选项。消防基地提供了良好的分类机制,因此不存在任何问题。您需要的查询越复杂,所需的数据结构就越复杂,您所拥有的非规范化数据也就越多。
但是,正如@Swordfish0321 0321 sql类型所指出的那样,类型的db可能更适合您。
https://stackoverflow.com/questions/29725534
复制相似问题