在Firebase中建模应用程序之类的聊天

Raj*_*jat 10 javascript nosql firebase firebase-realtime-database

我有一个Firebase数据库结构问题.我的方案接近聊天应用程序.以下是具体细节

- users(node storing several users of the app)
  - id1
      name: John
  - id2
      name: Meg
  - id2
      name: Kelly
- messages(node storing messages between two users)
  - message1
      from: id1
      to: id2
      text: ''
  - message2
      from: id3
      to: id1
      text: ''
Run Code Online (Sandbox Code Playgroud)

现在想象为单个用户构建对话视图.所以我想从特定用户和该特定用户获取所有消息

我现在写的如下:

let fromMessagesRef = firebase.database().ref('messages').orderByChild('from').equalTo(firebase.auth().currentUser.uid)
fromMessagesRef.once("value").then((snapshot) => {/* do something here*/})

let toMessagesRef = firebase.database().ref('messages').orderByChild('to').equalTo(firebase.auth().currentUser.uid)
toMessagesRef.once("value").then((snapshot) => {/* do something here*/})
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 这是建模问题的正确方法吗?
  2. 如果是,有没有办法结合上述2个查询?

Mat*_*erg 7

我会存储这样的数据:

- users(node storing several users of the app)
  - id1
      name: John
      messages
        message1: true
        message2: true
  - id2
      name: Meg
      messages
        message1: true
        message3: true
  - id3
      name: Kelly
      messages
        message2: true
        message3:true
- messages(node storing messages between two users)
  - message1
      from: id1
      to: id2
      text: ''
  - message2
      from: id3
      to: id1
      text: ''
  - message3
      from: id2
      to: id3
      text: ''
Run Code Online (Sandbox Code Playgroud)

Firebase建议存储这样的内容.所以在你的情况下你的查询将是

let fromMessagesRef = firebase.database().child('users').child(firebase.auth().currentUser.uid).child('messages')
Run Code Online (Sandbox Code Playgroud)

这使它非常快,因为没有订单完成.然后,您将遍历每条消息并从消息节点获取它的配置文件.