gpt4 book ai didi

firebase - 在 firebase 中处理复杂查询

转载 作者:行者123 更新时间:2023-12-03 06:25:41 25 4
gpt4 key购买 nike

我正在开发一个购物车移动应用程序,使用 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) 使用分页获取所有产品,其中类型为“pro”,然后加入 user_profiles 并按创建日期排序。

2) 使用分页获取所有产品,按类别过滤,然后与用户个人资料结合并按创建日期排序。

像上面一样,将会有越来越多的过滤选项出现,例如:价格。

我的主要问题是,我无法找到使用 FIREBASE 查询选项执行此操作的直接方法。我还提到了 firebase util 文档,但我也没有找到完成此操作的方法。

据我所知,完成此操作的唯一方法是,通过将所有数据(或大部分数据)放入客户端并在客户端中进行排序/过滤/分页来在客户端进行大部分处理结束。

但是我们期望这些模式中有数千条记录,因此如果我们在客户端进行处理,将会对性能产生巨大的影响!!

感谢您为解决此问题提供的专业知识/支持。

提前谢谢您。

更新:

我更改了数据结构(如 webduvet 所解释的)并尝试使用 firebase-util 但未能实现我想要的。标准:产品 -> 按类型/专业过滤 -> 按产品排序。创建日期

类型:{

专业人士:{

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();

“产品”将有数十万条记录,因此我们必须确保在 Firebase 端进行尽可能多的限制,而不是在客户端进行处理。

请帮忙!

最佳答案

这不能通过查询来完成,而是通过数据库设计来完成。您需要以非规范化的方式存储数据,例如:

type: {
pro:{
product1: user1,
product3: user1,
...
},
regular:{
...
}
}

上述结构将为您提供查询所有专业产品并检索用户 ID 的选项。 Firebase 提供了良好的排序机制,因此应该不会有问题。您需要的查询越复杂,所需的数据结构就越复杂,您将拥有的非规范化数据就越多。

但正如 @Swordfish0321 所指出的,sql 类型的数据库毕竟可能更适合你。

关于firebase - 在 firebase 中处理复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29725534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com