Google对'为什么不能进行高级查询?'的回答?只是“重组你的数据,所以你不需要做高级查询”
这看起来像是一个便宜的作品,但这个想法是因为firebase被认为是实时的,它需要查询数据为尽可能快,并且可能没有足够的“时间”/“资源”来为高级查询服务。这从谷歌的观点来看是有道理的,因为他们不能仅仅为你服务更多的服务器资源。在谷歌的心目中,它的简单描述是:“我们为您提供所有数据,当您需要时,您的工作就是让它保持一致,并随您做任何事情”
正因为如此,您的Node后端必须像服务器代理,从中获取firebase中的实际数据,并对该数据执行高级查询,并将查询的数据返回给客户端。或者,您可以无服务器地直接在客户端上执行此操作,但是,正如您所提到的,对于高敏感度的数据可能并不总是安全的。
基本上,你不能避免unqueried数据,但可以保持最小的unqueried数据。这可以通过重构您的数据来实现。
建议谷歌给你的是,
结构数据,根据您的意见 - 火力地堡,谷歌
这意味着是,说,如果有一个观点,即显示有关信息发票。传统上,如果你从SQL来了,你会设计出这样的事情
+ invoice
+ i01
+ date: xxx
+ customer: xxx
+ invoice_items
+ ii01
+ invoice: i01
+ product: p
+ qty: 1
...
谷歌希望你做的是
+ invoice
+ i01
+ date: xxx
+ customer: xxx
+ items: [
{
+ product: p
+ qty: 1
}]
...
这样,你不“需要”做一个高级查询,因为所有您需要用于视图的数据已经存在。
这可能看起来像退后一步,因为如果你考虑一下,这只会导致数据库状态迟早会变成不一致的状态,而且你是正确的,它有时会这样做。但Firebase确实提供了相应的措施,例如multipath updates。
希望这有助于:)
方式模糊的问题。您对'高级查询'和我的定义可能会非常不同。请提供具体示例,展示一些代码和Firebase结构。另外,请查看[如何提问](http://stackoverflow.com/help/how-to-ask)。更新您的问题,我们会尽力帮助! – Jay