Javascript 带角度的Firebase:从查询中排除字段
我想知道我的结构是否可用于firebase,或者我是否需要更改。下面是一个包含房间数组的/rooms示例:Javascript 带角度的Firebase:从查询中排除字段,javascript,angular,typescript,firebase,Javascript,Angular,Typescript,Firebase,我想知道我的结构是否可用于firebase,或者我是否需要更改。下面是一个包含房间数组的/rooms示例: export class Room { id: number; password: string; state: number; messages: Message[] = []; } 和信息: export class Message{ author: string; message: string; playerExcluded
export class Room {
id: number;
password: string;
state: number;
messages: Message[] = [];
}
和信息:
export class Message{
author: string;
message: string;
playerExcluded: string;
}
现在我必须加载一个没有密码的房间(我想这部分是可能的?)以及message.playerExclude!=firebase.auth().currentUser.uid(看起来更难)
这意味着每个用户都将拥有除被排除在外的所有消息。
一种解决方案是从文件室中加载没有对象的字段(如id、状态),然后再进行另一个查询以加载消息,但这似乎不是最优的
在一个查询中是否可能或过于复杂?有什么建议吗?根据Firebase文档,您应该这样做,而且既然您已经这样做了,您的结构应该还可以。这也意味着您需要执行两次查询以获取消息
从Firebase文档中: 如果将数据拆分为单独的路径(也称为非规范化),则可以根据需要在单独的调用中高效地下载数据。考虑这个扁平结构: 文件中还包括: 现在可以通过每次对话只下载几个字节来迭代房间列表,快速获取元数据以在UI中列出或显示房间。消息可以单独提取并在到达时显示,从而使UI保持快速响应
谢谢你的回答,艾萨克,我想你对我的主要问题的回答是否定的。这并没有回答我所有的问题,但我回顾了我的结构!
{
// Chats contains only meta info about each conversation
// stored under the chats's unique ID
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
"timestamp": 1459361875666
},
"two": { ... },
"three": { ... }
},
// Conversation members are easily accessible
// and stored by chat conversation ID
"members": {
// we'll talk about indices like this below
"one": {
"ghopper": true,
"alovelace": true,
"eclarke": true
},
"two": { ... },
"three": { ... }
},
// Messages are separate from data we may want to iterate quickly
// but still easily paginated and queried, and organized by chat
// conversation ID
"messages": {
"one": {
"m1": {
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
},
"m2": { ... },
"m3": { ... }
},
"two": { ... },
"three": { ... }
}
}